【问题标题】:Read from database and fill DataTable从数据库中读取并填充 DataTable
【发布时间】:2012-06-01 04:20:28
【问题描述】:

我通过DataReader 获取一组数据并分配给一个字符串。现在我需要用查询字段填充DataTable 列。 DataTable 连接到网格以显示填充的数据。

查询是:

strSQL = "SELECT EmpCode,EmpID,EmpName FROM dbo.Employee

DataTable 列是EmpCode, EmpID, EmpName

我需要阅读查询并分配给DataTable 的列并填写表格。我已经尝试如下,但我没有得到正确的输出,

Me.DtShifts.Tables("NonAllocated").Clear()
Me.DtShifts.Tables("NonAllocated").Load(dr)

【问题讨论】:

  • 能否一开始就将数据作为数据表读取并删除DR?
  • 我有 110 条记录,所有数据在 110 行中的表中都填充为零..
  • 你检查过你博士的值吗?以及如何从数据阅读器中填充您的博士?
  • 尝试 strSQL = "SELECT EmpCode,EmpID,EmpName FROM dbo.Employee" dr = SqlHelper.ExecuteReader(strCNString, CommandType.Text, strSQL) 'Me.DtShifts.NonAllocated.Rows.Add(dr. Item("EmpCode"), dr.Item("EmpID"), dr.Item("EmpName")) Me.DtShifts.Tables("NonAllocated").Clear() Me.DtShifts.Tables("NonAllocated")。 Load(dr) Catch ex As Exception MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try

标签: vb.net ado.net datatable


【解决方案1】:

连接对象仅用于说明。 DataAdapter 是关键位:

Dim strSql As String = "SELECT EmpCode,EmpID,EmpName FROM dbo.Employee"
Dim dtb As New DataTable
Using cnn As New SqlConnection(connectionString)
  cnn.Open()
  Using dad As New SqlDataAdapter(strSql, cnn)
    dad.Fill(dtb)
  End Using
  cnn.Close()
End Using

【讨论】:

  • 只是想问一下,当我尝试将此代码复制到 VB.Net 2003 中时,我收到一条错误消息,指出未声明 using。如果这是公认的答案,那为什么它对我不起作用?我需要添加其他内容吗?
  • 那是VB.NET的一个非常老的版本,可能早于Using关键字的引入
  • 我明白了。如果我删除Using 的所有实例,那么至少代码仍然有效。所以一切都很好。
  • Using cnn...更改为Dim cnn...并将End Using更改为cnn.Dispose()
  • 您可以在此处下载 Visual Basic 的最新社区(免费)版本:visualstudio.microsoft.com/vs/community
【解决方案2】:
Private Function LoaderData(ByVal strSql As String) As DataTable
    Dim cnn As SqlConnection
    Dim dad As SqlDataAdapter

    Dim dtb As New DataTable
    cnn = New SqlConnection(My.Settings.mySqlConnectionString)
    Try
        cnn.Open()
        dad = New SqlDataAdapter(strSql, cnn)
        dad.Fill(dtb)
        cnn.Close()
        dad.Dispose()
    Catch ex As Exception
        cnn.Close()
        MsgBox(ex.Message)
    End Try
    Return dtb
End Function

【讨论】:

  • 如果您将连接和适配器放在 Using-Block 中(始终推荐),它会自动为您处理。 DataAdapter 可以为您打开和关闭连接,因此不需要该代码。不清楚这对 6 年前公认的答案有何改进。
猜你喜欢
  • 2013-06-02
  • 2017-07-10
  • 2017-10-12
  • 2014-12-10
  • 2020-03-05
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多