我在将新行插入具有多个表的数据库时遇到问题。目前我的数据库连接到我的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}}?