【发布时间】:2010-06-28 18:26:20
【问题描述】:
我正在编写此代码,该代码将在数据库中查询条目并返回跟踪号的值以及在数据库中存在跟踪号时在标签上打印的时间。它现在不是,它似乎只是重新打印在文本框中输入的数字并且它没有获取日期。有任何想法吗?这是代码。
Dim TrNum As String = Me.DupTNText.Text
Dim TrDate As <=something if it is even needed
Dim connectionString As String = "Data Source=XXXXX;Initial Catalog=YYYYY;Integrated Security=True;Pooling=False;Encrypt=False"
Dim cmdText As String = "SELECT TrackingNumber, Date" & _
"FROM YYYYY " & _
"WHERE TrackingNumber = @TrackingNumber, Date = @Date"
Using connection As New SqlClient.SqlConnection(connectionString)
Dim cmd As New SqlClient.SqlCommand(cmdText, connection)
cmd.Parameters.AddWithValue("@TrackingNumber", TrNum)
cmd.Parameters.AddWithValue("@Date", TrDate)
connection.Open()
'this is where my print code begins and it works fine it just uses TrNum for the tracking number and TrDate for the date.
这是我编辑的代码并应用了更改,我越来越近了吗?
Dim dupText
Dim trackingNumber As String
Dim dateSent
dupText = Me.DupTNText
Dim connectionString As String = "Data Source=XXXXX;Initial Catalog=YYYYY;Integrated Security=True;Pooling=False;Encrypt=False"
Dim cmdText As String = "SELECT TrackingNumber, Date" & _
"FROM YYYYY " & _
"WHERE TrackingNumber = @TrackingNumber, Date = @Date"
Using connection As New SqlClient.SqlConnection(connectionString)
Dim cmd As New SqlClient.SqlCommand(cmdText, connection)
cmd.Parameters.AddWithValue("@TrackingNumber", dupText)
cmd.Parameters("@TrackingNumber").Direction = ParameterDirection.Input
connection.Open()
Dim sdr As SqlDataReader = cmd.ExecuteReader()
If (sdr("TrackingNumber") IsNot Nothing) Then
trackingNumber = Convert.ToString(sdr("TrackingNumber"))
dateSent = Convert.ToString(sdr("Date"))
End If
编辑#3
已应用更改,我很确定它现在是查询字符串。我明白了
“参数化查询 '(@TrackingNumber nvarchar(4000),@Date datetime)SELECT TrackingNu' 需要参数 '@TrackingNumber',但未提供该参数。”
下面的字符串。您还需要查看代码的哪些其他部分来帮助确定问题?我觉得我很亲密,谢谢我从中学到了很多东西!也很抱歉更改变量名。
Private Sub DupOKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DupOKButton.Click
Dim dupText
Dim trackingNumber As String
Dim dateSent
dupText = Me.DupTNText
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 AND Date = @Date"
Using connection As New SqlClient.SqlConnection(connectionString)
Dim cmd As New SqlClient.SqlCommand(cmdText, connection)
cmd.Parameters.Add(CreateSqlParameter("@TrackingNumber", DbType.String, ParameterDirection.Input, trackingNumber))
cmd.Parameters.Add(CreateSqlParameter("@Date", DbType.DateTime, ParameterDirection.Input, dateSent))
connection.Open()
Dim sdr As SqlDataReader = cmd.ExecuteReader()
If (sdr("TrackingNumber") IsNot Nothing) Then
trackingNumber = Convert.ToString(sdr("TrackingNumber"))
dateSent = Convert.ToString(sdr("Date"))
End If
'Printing code...
编辑#4
Private Sub DupOKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DupOKButton.Click
Dim trackingNumber As String
Dim dateSent As DateTime
trackingNumber = 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 AND Date = @Date"
Using connection As New SqlClient.SqlConnection(connectionString)
Dim cmd As New SqlClient.SqlCommand(cmdText, connection)
cmd.Parameters.Add(CreateSqlParameter("@TrackingNumber", DbType.String, ParameterDirection.Input, trackingNumber))
cmd.Parameters.Add(CreateSqlParameter("@Date", DbType.DateTime, ParameterDirection.Input, dateSent))
connection.Open()
Dim sdr As SqlDataReader = cmd.ExecuteReader()
If (sdr("TrackingNumber") IsNot Nothing) Then
trackingNumber = Convert.ToString(sdr("TrackingNumber"))
dateSent = Convert.ToString(sdr("Date"))
End If
编辑#5
Private Sub DupOKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DupOKButton.Click
Dim trackingNumber As String
Dim dateSent As DateTime
trackingNumber = 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, trackingNumber))
'cmd.Parameters.Add(CreateSqlParameter("@Date", DbType.DateTime, ParameterDirection.Input, dateSent))
connection.Open()
Dim sdr As SqlDataReader = cmd.ExecuteReader()
If (sdr("TrackingNumber") IsNot Nothing) Then
trackingNumber = Convert.ToString(sdr("TrackingNumber"))
dateSent = Convert.ToString(sdr("Date"))
Else
End If
【问题讨论】:
-
你是否调用了
cmd.ExecuteReader()方法? -
@Will Marcouiller 这是我所做的一些更改
-
在您的代码中,您没有为变量
dupText和dateSent提供任何数据类型。这可能会在转换时导致 null(无)值,因此这会抱怨未提供参数。另外,它似乎正在监视两个nvarchar(4000)数据类型作为参数,因此将您的SqlParameter.DbType更改为适当的类型并进行测试。尝试使用QuickWatch来查看在对数据库执行查询之前会发生什么。 -
@Will Marcouiller 我不确定 dupText 的数据类型,因为它从文本框中提取条目,因此字符串不起作用并且文本太模糊,我将 dateent 更改为 DateTime,现在可以看到正确的数据类型。我使用了快速启动,它确实因为空值而出错。我修改了我的代码并将其发布在上面。我想我是错的。如果我可以将文本框中的条目转换为字符串并使用上面的代码,我想我就在那里。唯一的问题是,这还有可能吗?
-
TextBox.Text属性是String类型的。dateSent变量值应该通过DateTimePicker控件选择,如果您要使用 WinForms。然后,您的DateTimePicker.Value是DateTime类型。所以,你的dateSent变量应该是DateTime。然而,您应该首先考虑您的数据表列数据类型,因为这是 RDBMS 必须处理的问题。好像在等nvarchar(4000),所以试试DbType.String。
标签: sql vb.net visual-studio-2010