【发布时间】:2020-02-08 16:17:01
【问题描述】:
尝试使用带有WHERE 子句的SqlDataAdapter 填充数据表,但它没有返回任何内容。 SQL 命令本身从 SSMS 中返回数据,仅删除代码中的 WHERE 子句即可按预期填充数据表。
Dim adapter As New SqlDataAdapter
Dim datatable As New DataTable
Using cnn As New SqlConnection(connectionString)
cnn.Open()
adapter = New SqlDataAdapter("SELECT * FROM [MyProjectDtbl] WHERE zipcode = 22021", cnn)
adapter.Fill(datatable)
adapter.Dispose()
End Using
翻遍Select命令EventSink,发现:
无法将“System.Data.SqlClient.SqlInternalConnectionTds”类型的对象转换为“System.Data.SqlClient.SqlInternalConnectionSmi”类型
【问题讨论】:
-
邮政编码是数据库表中名为 MyProjectDbtl 的数字字段吗?
-
是的,邮政编码是一个整数
-
OT,该列不应该是数字类型。区号、电话号码等不是您进行数学运算的数字。它们应该是包含数字字符的文本。
-
只是为了快速检查,如果您使用
WHERE zipcode <> 22021,它会返回任何内容吗? -
我怀疑这个例外是一个红鲱鱼。显然它被捕获了,否则你会看到一个未处理的异常。我怀疑这发生在尝试将对象转换为一种类型的代码中,如果失败,则继续将其转换为另一种类型。抛出的异常是完全合法的,并且一直在系统代码中发生。当他们没有被抓到时,你就有问题了。
标签: sql-server vb.net