将新记录添加到DataTable

时间:2016-07-14 20:00:42

标签: sql vb.net ado.net

我在将新行插入具有多个表的数据库时遇到问题。目前我的数据库连接到我的Visual Basic项目。到目前为止我所拥有的是:

Imports System.Data.SqlClient
Public Class MainForm

Private m_cn As New SqlConnection()
Private m_DA As SqlDataAdapter
Private m_CB As SqlCommandBuilder
Private m_DataTable As New DataTable
Private m_IntRowPosition As Integer = 0

    Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles Me.Load
        m_cn.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename = C:\Users\pattanasio\Desktop\Visual Basic Projects\DPG Project Hours Database\Mestek Database.mdf;Integrated Security=True;Connect Timeout=30"
        m_cn.Open()
        m_DA = New SqlDataAdapter("SELECT * FROM Employee_Table", m_cn)
        m_CB = New SqlCommandBuilder(m_DA)
        m_DA.Fill(m_DataTable)
    End Sub

    Private Sub btnInsertIntoDatabase_Click(sender As Object, e As EventArgs) Handles btnInsertIntoDatabase.Click
    Dim drNewRow As DataRow = m_DataTable.NewRow()

        For m_IntRowPosition = 0 To lstScannedNames.Items.Count()
             If m_DataTable.Rows.Count = 0 Then
                drNewRow("emp_id") = m_IntRowPosition + 1
                drNewRow("emp_name") = lstScannedNames.Items.Item(m_IntRowPosition)
                m_DataTable.Rows.Add(drNewRow)
                m_DA.Update(m_DataTable)
                m_IntRowPosition = m_DataTable.Rows.Count - 1
            End If
        Next m_IntRowPosition
    End Sub
End Class

当我运行程序并单击该按钮时,我在drNewRow("emp_name")行上收到错误消息,指出emp_name列不属于该表。完整错误表明它是An unhandled exception of type 'System.ArgumentException' occurred in System.Data.dll我还想知道为什么在引用emp_id列之前错误没有被抛出。我的猜测是我收到此错误,因为我的DataTable对象不知道要引用的数据库中的哪个数据表。此外,值得注意的是emp_id是我的5个表中的一个的主键,也是其他3个表中的外键。我觉得我很近,但我已经被困了几个小时。对不起,如果我的术语没有被发现,我对此非常陌生。

我的数据库看起来像this

以下是我的代码的粘贴箱链接:http://pastebin.com/UiYXEZMG

好的,值得注意的是,当我浏览Autos窗口查看我的drNewRow插入的表格,然后使用文本可视化工具时,它显示了我最初的4列了。 emp_id的1列和第一,中间和姓氏的其他3列。但是,在数据库设计器中,我删除了2个名称列,并将其余列重命名为emp_name,而未触及emp_id。这肯定是我的问题的原因,但我不知道如何解决它。 因此,在数据库设计器.xsd文件中,它向我的表显示了我希望它如何。但是在Autos窗口中,它显示它正在使用旧表。此外,如果我想使用其他表,我是否必须SELECT在我的SqlDataAdapter中使用不同的表{1}}?

0 个答案:

没有答案