【问题标题】:What would cause my dataset to drop a row?什么会导致我的数据集删除一行?
【发布时间】: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


【解决方案1】:

您的代码已经使用 sqlR.Read() 行读取查询的第一行。此行在您的代码中是不必要的。删除它,它会正常工作。

SqlCommand、SqlConnection 和 SqlDataReader 也实现了 iDisposable,所以一定要对它们使用 using-statement:

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   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多