2010-06-29 20 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