【发布时间】:2020-07-09 19:18:29
【问题描述】:
我正在使用 Visual Basic 创建表单应用程序,作为大学项目的一部分。我使用 SQL 语句从 access 数据库中读取数据,但在写入时遇到了一些麻烦。我想冒险猜测这是由于数据库在表之间存在关系。
这是我第一次尝试制作实质性的东西,vb 不是我选择的语言。期望代码充其量是糟糕的。如果有人有我可以用来改进的资源的链接,我将不胜感激。
例外:
抛出异常:'System.Data.OleDb.OleDbException:'没有为一个或多个必需参数提供值。'
异常位置:'commAddToStaff.ExecuteNonQuery()'
两个 try 语句在运行时都会捕获异常。我尝试在参数中提供数据,而不是使用文本框中的数据,但这并没有解决问题。
代码:
Private Sub btnAddStaffMember_Click(sender As Object, e As EventArgs) Handles btnAddStaffMember.Click
'Dimension tblStaff Parameters
Dim AddEmployeeIDParam As New OleDb.OleDbParameter("@AddEmployeeID", txtAddEmployeeID.Text)
Dim AddForenameParam As New OleDb.OleDbParameter("@AddForename", txtAddForename.Text)
Dim AddSurnameParam As New OleDb.OleDbParameter("@AddSurname", txtAddSurname.Text)
Dim AddDOBParam As New OleDb.OleDbParameter("@AddDOB", txtAddDOB.Text)
Dim AddUserTierParam As New OleDb.OleDbParameter("@AddUserTier", txtAddUserTier.Text)
'Dimension tblContacts Parameters
Dim conContact As New OleDb.OleDbConnection("Provider=Microsoft.......")
Dim commContactCount As New OleDb.OleDbCommand("Select Count(*) FROM tblContacts", conContact)
commContactCount.Connection.Open()
Dim ContactID = commContactCount.ExecuteScalar + 1 'Calculate the contactID of the new record
commContactCount.Connection.Close() 'Close the connection
Dim AddContactIDParam As New OleDb.OleDbParameter("@AddContactID", ContactID)
Dim AddAddressParam As New OleDb.OleDbParameter("@AddAddress", txtAddAddress.Text)
Dim AddPostcodeParam As New OleDb.OleDbParameter("@AddPostcode", txtAddPostcode.Text)
Dim AddEmailParam As New OleDb.OleDbParameter("@AddEmail", txtAddEmail.Text)
Dim AddMobileNoParam As New OleDb.OleDbParameter("@AddMobileNo", txtAddMobileNumber.Text)
Dim conAddToStaff As New OleDb.OleDbConnection("Provider=Microsoft....")
Dim commAddToStaff As New OleDb.OleDbCommand("Insert Into tblStaff (EmployeeID, Forename, Surname, DOB, User_Tier, ContactID) Values (@AddEmployeeID, @AddForename, @AddSurname, @AddDOB, @AddUserTier, @AddContactID)", conAddToStaff)
commAddToStaff.Parameters.Add(AddEmployeeIDParam)
commAddToStaff.Parameters.Add(AddForenameParam)
commAddToStaff.Parameters.Add(AddSurnameParam)
commAddToStaff.Parameters.Add(AddDOBParam)
commAddToStaff.Parameters.Add(AddUserTierParam)
Dim commAddToContact As New OleDb.OleDbCommand("Insert Into tblContacts (ContactID, Address, Postcode, Email, Mobile_Number) Values (@AddContactID, @AddAddress, @AddPostcode, @AddEmail, @AddMobileNo)", conContact)
commAddToContact.Parameters.Add(AddContactIDParam)
commAddToContact.Parameters.Add(AddAddressParam)
commAddToContact.Parameters.Add(AddPostcodeParam)
commAddToContact.Parameters.Add(AddEmailParam)
commAddToContact.Parameters.Add(AddMobileNoParam)
Try
commAddToStaff.Connection.Open() 'Open a connection to the database
commAddToStaff.ExecuteNonQuery() 'Execute the command
commAddToStaff.Connection.Dispose() 'Remove unmanaged resources
commAddToStaff.Connection.Close() 'Close the connection
Catch ex As Exception
MessageBox.Show("Error with staff")
End Try
Try
commAddToContact.Connection.Open() 'Open a connection to the database
commAddToContact.ExecuteNonQuery() 'Execute the command
commAddToContact.Connection.Dispose() 'Remove unmanaged resources
commAddToContact.Connection.Close() 'Close the connection
Catch ex As Exception
MessageBox.Show("Error with contacts")
End Try
MessageBox.Show("Reached")
Me.Hide() 'Close the Current screen
StaffDB_Add_Staff_Security_Question.Show() 'Open the Add Security Question Screen
End Sub
【问题讨论】:
-
实际的错误信息是什么?这将告诉您和我们要寻找什么。您似乎不知道它是什么的事实表明您实际上还没有尝试解决问题。如果你不知道问题出在哪里,你怎么能?
-
对不起,我以为我把它包括在内了。我不确定这是否是您正在寻找的东西,我对此真的很陌生。我已经添加了我认为是上面的错误消息。
-
我已经在上面更新了,它发生在我尝试 ExecuteNonQuery() 的两次。
标签: sql vb.net ms-access relational-database