从数据库中读取并填充DataTable

9
我正在通过一个 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)

你能否一开始就将数据读取为 DataTable 并删除 DR? - Preet Sangha
我有110条记录,表格中的110行数据都填充为零。 - Bramenath
你检查过dr中的值了吗?你是如何从数据读取器中填充dr的? - Nick
尝试 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)捕获ex As Exception MessageBox.Show(ex.Message,“ERROR”,MessageBoxButtons.OK,MessageBoxIcon.Error) End Try - Bramenath
2个回答

30

连接对象仅用于说明。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”未声明。如果这是被接受的答案,为什么在我的环境中不起作用?我需要添加其他内容吗? - hjh93
1
那是一个非常老的VB.NET版本,可能早于“Using”关键字的引入。 - SSS
我明白了。如果我删除所有Using的实例,代码仍然可以正常工作。所以一切都很好。 - hjh93
Using cnn...更改为Dim cnn...,并将End Using更改为cnn.Dispose() - SSS
您可以在此处下载最新的Visual Basic社区(免费)版本:https://visualstudio.microsoft.com/vs/community/ - SSS

-1
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

4
如果你把连接和适配器放在Using-Block中(这总是推荐的做法),它会自动为你处理清理。DataAdapter可以为你打开和关闭连接,因此该代码是不必要的。不清楚这如何改进6年前被接受的答案。 - LarsTech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接