【发布时间】:2019-08-29 13:12:08
【问题描述】:
我有一个 SQL 语句,当在 SSMS 中运行时,它返回 6 行。将语句附加到命令类型为Text的VB.NET SQLCommand的命令文本后,用SqlDataReader读取,并附加到数据集,返回的数据集只有5行。
起初,我认为这是数据的问题。但是,在多次删除和添加具有不同数据的源表的行之后,很明显我总是得到总行数 - 1。然后我决定只使用 SQLDataAdapter 来填充 DataSet 和适当数量的行已返回。
Dim ds As New DataSet
Dim sqlCmd as New SqlCommand
Dim sqlCn As New SqlConnection
Dim sqlR As New SqlCommand
sqlCn.ConnectionString = "SomeConnectionString"
With sqlCmd.CommandText = "Select * from DummyTable"
.CommandType = CommandType.Text
.Connection = sqlCn
End With
sqlCn.Open()
sqlR = sqlCmd.ExecuteReader
sqlR.Read()
If sqlR.HasRows() Then
ds.Tables.Add("DummyTable")
ds.Tables(0).Load(sqlR)
return ds
End If
从这里,我期待看到 DummyTable 中的 6 行。相反,我只看到了 5 个。
但是,如果我使用以下内容:
Dim da as SqlDataAdapter
Using sqlCn
da.SelectCommand = New SqlCommand(sqlCmd.CommandText, sqlCn)
da.Fill(ds)
End Using
Return ds
我得到了完整的 6 行。关于 DataSet 的 Tables.Add(tableName) 或 Tables(n).Load(dataReader) 的工作方式,我有什么遗漏吗?在此之前我从未使用过 SqlDataReaders,并被告知要坚持使用它们,因为我们的其他项目使用它们。
【问题讨论】:
-
我怀疑这行 sqlR.Read() 是罪魁祸首,它已经让读者前进了一行。删除它,然后重试。
-
@Esko 好吧,我什至没有意识到这一点,我觉得自己像个傻瓜。这解决了问题!哇。 3分钟内解决。我将遍历项目的其余部分,看看我们的高级开发人员给我的这个指令是否在其他地方重复,导致问题。非常感谢!
标签: vb.net