这非常紧迫,我需要在3个半小时内呈现此应用程序。SqlDataReader在没有数据时获取行
我的应用程序根据数据源检查数据库中是否存在值,并根据是否找到有问题的值更改值。 问题是我已经在SSMS中运行带有问题的值的sql查询并且没有行被返回,但是,我的DataReader说它有行。
这意味着我的应用程序报告不准确。 这里是我的代码:
Using conn As New SqlConnection("Data Source=.\SQLEXPRESS; Initial Catalog=Testing; Integrated Security=True;")
Dim cmd As New SqlCommand(sql, conn)
conn.Open()
Dim reader As SqlDataReader = cmd.ExecuteReader
If reader.HasRows Then
Value = True
AcctNumber = reader(1)
End If
reader.Close()
End Using
我已经删除代码是不相关的这篇文章,但你可能想知道的是:
值是布尔 ACCTNUMBER是一个String
由于这是一个工作的应用程序,我宁愿不包括SQL查询。问题是读者。如果我注释掉Value = True
,我会得到正确的信息,但如果将Value设置为True,那么它将不准确地报告。
在此先感谢!
编辑:完整的源代码:
Case "Business"
' Change the number format to local because that's what it is in the db
If Microsoft.VisualBasic.Left(NumberToCheck, 2) = "27" Then
NumberToCheck = NumberToCheck.Replace(Microsoft.VisualBasic.Left(NumberToCheck, 2), "0")
End If
Dim sql As String = "SELECT a.TelNumber, c.AccountNumber " & _
"FROM TelInfo a " & _
"INNER JOIN Customers b ON a.CustID = b.pkguidId " & _
"INNER JOIN Accounts c ON b.pkguidId = c.CustID " & _
"WHERE a.TelNumber = '" & NumberToCheck & "'"
Using conn As New SqlConnection("Data Source=.\SQLEXPRESS; Initial Catalog=Testing; Persist Security Info=True; " & _
"User Id=JoeSoap; Password=paoseoj;")
Dim cmd As New SqlCommand(sql, conn)
conn.Open()
Dim reader As SqlDataReader = cmd.ExecuteReader
If reader.Read Then
Value = True
AcctNumber = reader(1)
End If
reader.Close()
End Using
在08/02/10之前(MM/DD/YY)下面提出的意见:
Value
仅仅是得到由返回的布尔功能来指示搜索到的电话号码(NumberToCheck
)存在于数据库中。
所以......
Private AcctNumber As String
Dim val As Boolean = False
val = CheckNumber("3235553469")
If val Then
' AcctNumber will have been set by CheckNumber
Label1.Text = AcctNumber
End If
val
如果NumberToCheck(在本例3235553469)数据库中存在才会返回真。
将NumberToCheck的值复制到SSMS中并在那里测试查询后,我可以验证查询是否按预期工作。
不,我无法填充数据集,因为表中的信息量(+/- 9.5m行)。即使使用“WHERE”过滤器,查询对资源来说过于沉重,最终以OutOfMemory Exception
结尾,这就是我使用DataReader的原因。
我打算尝试ExecuteScalar
选项,现在由Darryl建议作为答案,将更新结果。
您能向我们展示SQL吗? – egrunin 2010-07-29 09:48:41
我知道编辑中的ConnectionString与原始的不同。为了合法目的,我必须改变某些事情......我正在使用的信息非常敏感。 – 2010-07-29 10:03:11
连接字符串是最不可能的问题。 – egrunin 2010-07-29 10:14:13