請看看下面的模式:SqlDataReader的 - 沒有結果
CREATE TABLE Person (id int not null identity,[index] varchar(30),datecreated datetime)
insert into Person ([index],datecreated) values ('4,5,6','2011-01-01')
insert into Person ([index],datecreated) values ('1,2,3','2011-02-02')
insert into Person ([index],datecreated) values ('7,8','2012-02-02')
和下面的代碼:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
Dim _ConString As String = WebConfigurationManager.ConnectionStrings("dbConnection").ConnectionString
Dim connection As New SqlConnection(_ConString)
Dim objCommand As New SqlCommand
Dim objDR As SqlDataReader
Dim sqlString As String
sqlString = "SELECT * FROM Person WHERE datecreated < '2012-01-01' "
objCommand.CommandText = sqlString & " ORDER BY left (substring([index],charindex(',',[index])+1,200), " & _
" charindex(',',substring([index],charindex(',',[index])+1,200))-1)"
objCommand.Connection = connection
connection.Open()
objDR = objCommand.ExecuteReader
If objDR.HasRows Then
MsgBox("Has Rows")
Else
MsgBox("No Rows")
End If
connection.Close()
Catch ex As Exception
End Try
End Sub
此代碼是在實時系統中的部分功能。每當我用ORDER BY在開發模式(或直播)中運行完整的應用程序; DataReader沒有記錄,出現一個消息框說沒有行(當我單獨運行上面的代碼時,這不會發生)。在ORDER BY子句被註釋掉之後,返回正確的行數。沒有異常拋出。有沒有辦法看到SQLDataReader是否產生了錯誤?
UPDATE 請不要例如張貼關於內存泄漏的答案連接未關閉等,或者異常未處理的事實。我意識到這一點。我生成了上面的代碼以嘗試重新創建問題。
UPDATE2 23/05/2012 19:30 gmt 我已經做了一些進一步的測試,它發現使用參數化查詢時會出現差異,即一行將在SQL Studio Manager中返回,但在命令後不會返回對象被執行。我知道參數化查詢已被緩存。爲什麼參數化執行計劃可能與沒有參數化的執行計劃不同?
如果你只是通過一些其他財產使用[索引]'或'爲了爲了,會發生什麼? –
@Jon Skeet,謝謝。它返回正確的順序兩排(沒問題) – w0051977
@ w0051977:好了 - 所以我懷疑一個行「刪除」如果計算其訂購的「鑰匙」出了毛病,基本上 - 例如因爲你在界限之外取一個子串。 –