Vb.net 什么会导致我的数据集删除一行?

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

我有一个SQL语句,在SSMS中运行时,返回6行。将语句附加到命令类型为text的VB.NET SQLCommand的命令文本、使用SqlDataReader读取语句并将其附加到数据集后,返回的数据集只有5行

起初,我认为这是数据的问题。然而,在多次使用不同的数据删除行并将行添加到源表之后,很明显,我总是得到总行数-1。然后我决定只使用SQLDataAdapter来填充数据集,并返回正确的行数

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分钟内解决。我将浏览项目的其余部分,看看我们的高级开发人员给我的指示是否在其他地方重复,导致问题。非常感谢你!