Vb.net 什么会导致我的数据集删除一行?
我有一个SQL语句,在SSMS中运行时,返回6行。将语句附加到命令类型为text的VB.NET SQLCommand的命令文本、使用SqlDataReader读取语句并将其附加到数据集后,返回的数据集只有5行 起初,我认为这是数据的问题。然而,在多次使用不同的数据删除行并将行添加到源表之后,很明显,我总是得到总行数-1。然后我决定只使用SQLDataAdapter来填充数据集,并返回正确的行数Vb.net 什么会导致我的数据集删除一行?,vb.net,Vb.net,我有一个SQL语句,在SSMS中运行时,返回6行。将语句附加到命令类型为text的VB.NET SQLCommand的命令文本、使用SqlDataReader读取语句并将其附加到数据集后,返回的数据集只有5行 起初,我认为这是数据的问题。然而,在多次使用不同的数据删除行并将行添加到源表之后,很明显,我总是得到总行数-1。然后我决定只使用SQLDataAdapter来填充数据集,并返回正确的行数 Dim ds As New DataSet Dim sqlCmd as New SqlCommand
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行。数据集的Tables.Add(tableName)或Tables(n.Load)(dataReader)的工作方式是否有我遗漏的地方?在此之前,我从未使用过SqlDataReaders,并且被告知在我们的其他项目使用它们时要坚持使用它们。您的代码已经在读取查询的第一行,行为sqlR.Read()。代码中不需要这一行。拆下它,它会很好地工作 另外,SqlCommand、SqlConnection和SqlDataReader实现iDisposable,因此请确保对它们使用using语句:
Using sqlCn As New SqlConnection("SomeConnectionString")
sqlCn.Open()
Using sqlCmd as New SqlCommand
With sqlCmd.CommandText = "Select * from DummyTable"
.CommandType = CommandType.Text
.Connection = sqlCn
End With
Using sqlR As SqlDataReader = sqlCmd.ExecuteReader
If sqlR.HasRows() Then
Dim ds As New DataSet
ds.Tables.Add("DummyTable")
ds.Tables(0).Load(sqlR)
return ds
End If
End Using
End Using
End Using
我怀疑行sqlR.Read()是罪魁祸首,它已经将读卡器向前推进了一行。把它取下来再试一次。@Esko好吧,我觉得自己像个傻瓜,根本没意识到这一点。这解决了问题!哇!3分钟内解决。我将浏览项目的其余部分,看看我们的高级开发人员给我的指示是否在其他地方重复,导致问题。非常感谢你!