如何在Access中使用VB和SQL向关系数据库添加记录

如何在Access中使用VB和SQL向关系数据库添加记录,sql,vb.net,ms-access,relational-database,Sql,Vb.net,Ms Access,Relational Database,我正在使用Visual Basic创建表单应用程序,作为大学项目的一部分。我使用SQL语句从access数据库中读取数据,但写入时遇到一些问题。我想冒昧猜测一下,这是因为数据库在表之间有关系 这是我第一次尝试做一些实质性的东西,vb不是我选择的语言。预计代码最多也会很差。如果任何人有我可以用来改进的资源链接,我将不胜感激 例外情况: 引发异常:“System.Data.OleDb.OLEDBEException:“未为一个或多个必需参数提供值。” 异常位置:“commAddToStaff.Exe

我正在使用Visual Basic创建表单应用程序,作为大学项目的一部分。我使用SQL语句从access数据库中读取数据,但写入时遇到一些问题。我想冒昧猜测一下,这是因为数据库在表之间有关系

这是我第一次尝试做一些实质性的东西,vb不是我选择的语言。预计代码最多也会很差。如果任何人有我可以用来改进的资源链接,我将不胜感激

例外情况:

引发异常:“System.Data.OleDb.OLEDBEException:“未为一个或多个必需参数提供值。”

异常位置:“commAddToStaff.ExecuteOnQuery()”

运行时,两个try语句都捕获异常。我尝试在参数中提供数据,而不是使用文本框中的数据,但这并没有解决问题

代码:

Private Sub btnAddStaffMember_Click(发送者作为对象,e作为事件参数)处理btnAddStaffMember。单击
'维度tblStaff参数
Dim AddEmployeeIDParam作为新的OleDb.OLEDBPParameter(“@AddEmployeeID”,txtAddEmployeeID.Text)
Dim AddForenameParam作为新的OleDb.OLEDBPParameter(“@AddForename”,txtAddForename.Text)
Dim ADDNAMESH参数作为新的OleDb.OleDbParameter(“@ADDNAMESH”,txtADDNAMESH.Text)
Dim AddDOBParam作为新的OleDb.OleDb参数(“@AddDOB”,txtAddDOB.Text)
Dim AddUserTierParam作为新的OleDb.OLEDBPParameter(“@AddUserTier”,txtAddUserTier.Text)
'维度tblContacts参数
Dim conContact作为新的OleDb.OleDb连接(“提供商=微软……”)
Dim commContactCount作为新OleDb.OLEDBCOMAND(“从tblContacts中选择计数(*),conContact)
commContactCount.Connection.Open()
Dim ContactID=commContactCount.ExecuteScalar+1'计算新记录的ContactID
commContactCount.Connection.Close()'关闭连接
Dim AddContactIDParam作为新的OleDb.OleDb参数(“@AddContactID”,ContactID)
Dim AddAddressParam作为新的OleDb.OLEDBPParameter(“@AddAddress”,txtAddAddress.Text)
Dim AddPostcodeParam作为新的OleDb.OLEDBPParameter(“@AddPostcode”,txtAddPostcode.Text)
Dim AddEmailParam作为新的OleDb.OleDbParameter(“@AddEmail”,txtAddEmail.Text)
Dim AddMobileParam作为新的OleDb.OleDb参数(“@AddMobileNo”,txtAddMobileNumber.Text)
Dim conAddToStaff作为新的OleDb.OleDbConnection(“提供程序=Microsoft…”)
Dim commAddToStaff作为新的OleDb.OleDbCommand(“插入tblStaff(员工ID、姓名、姓氏、DOB、用户层、联系人ID)值(@AddEmployeeID、@AddForName、@AddNames、@AddDOB、@AddUserTier、@AddContactID)”,conAddToStaff)
commAddToStaff.Parameters.Add(AddEmployeeIDParam)
commAddToStaff.Parameters.Add(AddForenameParam)
commAddToStaff.Parameters.Add(addnamesparam)
commAddToStaff.Parameters.Add(AddDOBParam)
commAddToStaff.Parameters.Add(AddUserTierParam)
Dim commAddToContact作为新的OleDb.OleDbCommand(“插入TBL联系人(联系人ID、地址、邮政编码、电子邮件、手机号码)值(@AddContactID、@AddAddress、@AddPostcode、@AddMail、@AddMobileNo)”,conContact)
commAddToContact.Parameters.Add(AddContactIDParam)
commAddToContact.Parameters.Add(AddAddressParam)
commAddToContact.Parameters.Add(AddPostcodeParam)
commAddToContact.Parameters.Add(AddEmailParam)
commAddToContact.Parameters.Add(AddMobileParam)
尝试
commAddToStaff.Connection.Open()'打开与数据库的连接
commAddToStaff.ExecuteOnQuery()'执行命令
commAddToStaff.Connection.Dispose()'删除非托管资源
commAddToStaff.Connection.Close()'关闭连接
特例
MessageBox.Show(“员工出错”)
结束尝试
尝试
commAddToContact.Connection.Open()'打开与数据库的连接
commAddToContact.ExecuteOnQuery()'执行命令
commAddToContact.Connection.Dispose()'删除非托管资源
commAddToContact.Connection.Close()'关闭连接
特例
MessageBox.Show(“联系人错误”)
结束尝试
MessageBox.Show(“到达”)
Me.Hide()'关闭当前屏幕
StaffDB_添加_员工_安全问题。Show()'打开添加安全问题屏幕
端接头

您在此处的六列中插入了六个值:

Dim commAddToStaff作为新的OleDb.OleDbCommand(“插入到tblStaff(员工ID、姓名、姓氏、DOB、用户层、联系人ID)值(@AddEmployeeID、@AddForName、@AddNames、@AddDOB、@AddUserTier、@AddContactID)”,conAddToStaff)
但您只需在此处向命令添加五个参数:

commAddToStaff.Parameters.Add(AddEmployeeIDParam)
commAddToStaff.Parameters.Add(AddForenameParam)
commAddToStaff.Parameters.Add(addnamesparam)
commAddToStaff.Parameters.Add(AddDOBParam)
commAddToStaff.Parameters.Add(AddUserTierParam)
SQL代码中的
@AddContactID
占位符的参数在哪里

编辑:

作为记录,我倾向于为这类任务编写代码,而忽略了生成
ContactID
值的可怕方式:

将连接用作新的OleDbConnection(“此处为连接字符串”)
connection.Open()
Dim contactCount为整数
使用contactCountCommand作为新的OleDbCommand(“从tblContacts中选择COUNT(*),连接)
contactCount=CInt(contactCountCommand.ExecuteScalar())
终端使用
Dim contactId=contactCount+1
使用staffCommand作为新的OleDbCommand(“插入tblStaff(EmployeeID、Forename、姓氏、DOB、用户层、ContactID)”值(@EmployeeID、@Forename、@Nastname、@DOB、@User层、@ContactID)”,连接)
使用staffCommand.Parameters