2010-06-29 21 views
1

在我的代碼中,我在文本框中輸入一個字符串,並讓查詢檢查服務器是否有條目。如果存在,它會將字符串和日期返回到兩個單獨的變量中。數據庫只有TrackingNumber和Date。以下是代碼。截至目前,我得到「無效數據存在時嘗試讀取」。在「If(sdr(」TrackingNumber「)IsNot Nothing)Then」line。我究竟做錯了什麼?SQL可能無法返回視覺基本查詢的值

Public Function CreateSqlParameter(ByVal name As String, ByVal dbType As DbType, ByVal direction As ParameterDirection, ByVal value As Object) As SqlParameter 

    Dim parameter As SqlParameter = New SqlParameter() 
    parameter.ParameterName = name 
    parameter.DbType = dbType 
    parameter.Direction = direction 
    parameter.Value = value 
    Return parameter 

End Function 




Private Sub DupOKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DupOKButton.Click 


    Dim trackNumber As String 
    Dim dateSent As DateTime 

    trackNumber = Me.DupTNText.Text 

    Dim connectionString As String = "Data Source=XXXXX;Initial Catalog=ScannedDB;Integrated Security=True;Pooling=False;Encrypt=False" 

    Dim cmdText As String = "SELECT TrackingNumber, [Date] FROM ScannedDBTable WHERE TrackingNumber = @TrackingNumber" 

    Using connection As New SqlClient.SqlConnection(connectionString) 

     Dim cmd As New SqlClient.SqlCommand(cmdText, connection) 

     cmd.Parameters.Add(CreateSqlParameter("@TrackingNumber", DbType.String, ParameterDirection.Input, trackNumber)) 
     cmd.Parameters.Add(CreateSqlParameter("@Date", DbType.DateTime, ParameterDirection.Input, dateSent)) 

     connection.Open() 

     Dim sdr As SqlDataReader = cmd.ExecuteReader() 

     If (sdr("TrackingNumber") IsNot Nothing) Then 
      trackNumber = Convert.ToString(sdr("@TrackingNumber")) 
      dateSent = Convert.ToString(sdr("@Date")) 
     Else 
     End If 

'Rest of code... 

回答

0

你可能不會得到任何行回來,嘗試:

While (sdr.read()) 



     If (sdr("TrackingNumber") IsNot Nothing) Then 
      trackNumber = Convert.ToString(sdr("@TrackingNumber")) 
      dateSent = Convert.ToString(sdr("@Date")) 
     Else 
     End If  

End While 
+0

這是vb.net不是C#。 – JonH 2010-06-29 18:20:30

+0

很確定他可以進行調整 – Gratzy 2010-06-29 18:22:02

+0

只需拿出{}並在末尾添加'loop' :) – egrunin 2010-06-29 18:22:11

0

跟蹤數字數據庫中的varchar?

如果是這樣,你可能需要讓你的VB代碼發送一個int而不是一個字符串。

+0

我改成了Int64的,仍然trhows同樣的錯誤。 – 0bfus 2010-06-29 18:21:46

0

如果sdr是讀者,你應該檢查DBNull.Value。

If (sdr("TrackingNumber") IS DBNull.Value) 
    'it's null 
else 
    'it's not null 
end if 

此外,請先閱讀您的閱讀器是否有任何內容。 If (reader.read()) then...

If (sdr.read()) then 
    if (sdr("TrackingNumber") IS DBNull.Value) Then 
     'its null 
    else 
     'not null 
    end if 
end if