我在数据库中插入数据时遇到问题,我使用OLEDB,它总是显示错误:
" Insert Into Statement"
中的语法错误
以下是我的保存按钮代码:
Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click
'Adding/Inserting Data to Database
Dim sqlqry As String
sqlqry = "INSERT INTO tblEmployeeInfo(EmpIdNo,LastName,FirstName,MiddleName,Gender,Age,BirthDay" & _
"BirthPlace,Address,ContactNo,CivilStatus,Position,MonthlyRate,DailyRate,Department" & _
"Agency,DateHired,Status,PHICno,TINno,SSSno)" & _
"VALUES(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14,@p15,@p16,@p17,@p18,@p19,@p20,@p21)"
Try
cnn.Open()
Using cmd As New OleDbCommand(sqlqry, cnn)
cmd.Parameters.AddWithValue("@p1", OleDbType.Integer).Value = txtEmpID.Text
cmd.Parameters.AddWithValue("@p2", OleDbType.Integer).Value = txtLname.Text
cmd.Parameters.AddWithValue("@p3", OleDbType.Integer).Value = txtFname.Text
cmd.Parameters.AddWithValue("@p4", OleDbType.Integer).Value = txtMname.Text
cmd.Parameters.AddWithValue("@p5", OleDbType.Integer).Value = cboGender.Text
cmd.Parameters.AddWithValue("@p6", OleDbType.Integer).Value = txtAge.Text
cmd.Parameters.AddWithValue("@p7", OleDbType.DBDate).Value = txtBirthdate.Text
cmd.Parameters.AddWithValue("@p8", OleDbType.Integer).Value = txtBirthPlace.Text
cmd.Parameters.AddWithValue("@p9", OleDbType.Integer).Value = txtAddress.Text
cmd.Parameters.AddWithValue("@p10", OleDbType.Integer).Value = txtContact.Text
cmd.Parameters.AddWithValue("@p11", OleDbType.Integer).Value = cboCvstat.Text
cmd.Parameters.AddWithValue("@p12", OleDbType.Integer).Value = cboPosition.Text
cmd.Parameters.AddWithValue("@p13", OleDbType.Integer).Value = txtMrate.Text
cmd.Parameters.AddWithValue("@p14", OleDbType.Integer).Value = txtDrate.Text
cmd.Parameters.AddWithValue("@p15", OleDbType.Integer).Value = cboDept.Text
cmd.Parameters.AddWithValue("@p16", OleDbType.Integer).Value = cboAgency.Text
cmd.Parameters.AddWithValue("@p17", OleDbType.DBDate).Value = txtDhired.Text
cmd.Parameters.AddWithValue("@p18", OleDbType.Integer).Value = cboStat.Text
cmd.Parameters.AddWithValue("@p19", OleDbType.Integer).Value = txtphic.Text
cmd.Parameters.AddWithValue("@p20", OleDbType.Integer).Value = txtTin.Text
cmd.Parameters.AddWithValue("@p21", OleDbType.Integer).Value = txtsss.Text
cmd.ExecuteNonQuery()
cmd.Dispose()
End Using
Catch ex As Exception
MsgBox(ex.Message)
Finally
If cnn.State = ConnectionState.Open Then
cnn.Close()
End If
End Try
End Sub
答案 0 :(得分:0)
错误消息非常明确。你有几件事情错了。
您缺少逗号:
sqlqry = "INSERT INTO tblEmployeeInfo(EmpIdNo,LastName,FirstName,MiddleName,Gender,Age,BirthDay," & _
^
"BirthPlace,Address,ContactNo,CivilStatus,Position,MonthlyRate,DailyRate,Department," & _
^
"Agency,DateHired,Status,PHICno,TINno,SSSno)" & _
"VALUES(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14,@p15,@p16,@p17,@p18,@p19,@p20,@p21)"
此外,您没有使用正确的参数类型。看看这些:
cmd.Parameters.AddWithValue("@p1", OleDbType.Integer).Value = txtEmpID.Text
cmd.Parameters.AddWithValue("@p2", OleDbType.Integer).Value = txtLname.Text
cmd.Parameters.AddWithValue("@p3", OleDbType.Integer).Value = txtFname.Text
cmd.Parameters.AddWithValue("@p4", OleDbType.Integer).Value = txtMname.Text
cmd.Parameters.AddWithValue("@p5", OleDbType.Integer).Value = cboGender.Text
cmd.Parameters.AddWithValue("@p6", OleDbType.Integer).Value = txtAge.Text
文字不是整数!
答案 1 :(得分:0)
您可能必须尊重数据类型 - 例如:
cmd.Parameters.AddWithValue("@p17", OleDbType.DBDate).Value = Convert.ToDateTime(txtDhired.Text)
答案 2 :(得分:0)
我终于在语法上发现了错误,我在vb.net中使用了错误的数据类型和保留字#34; Position"我想。
这里我的代码完美无缺,感谢您的帮助:
Dim sqlqry As String = "INSERT INTO tblEmployeeInfo(EmpIdNo,LastName,FirstName,MiddleName,Gender,Age,BirthdDate,BirthdPlace,Address,ContactNo," & _
"CivilStatus,wPosition,MonthlyRate,DailyRate,Department,Agency,DateHired,Status,PHICno,TINno,SSSno)" & _
"VALUES(@EmpId,@Lname,@Fname,@Mname,@Gender,@Age,@Bdate,@Bplace,@Adrs,@Contno,@CvStat,@wPos,@Mrate," & _
"@Drate,@Dept,@Agency,@Dhired,@Stat,@Phic,@Tin,@SSSn)"
Try
cnn.ConnectionString = cs
cnn.Open()
cmd = cnn.CreateCommand
With cmd
.Connection = cnn
.CommandText = sqlqry
.CommandType = CommandType.Text
.Parameters.AddWithValue("@EmpId", OleDbType.VarWChar).Value = txtEmpID.Text
.Parameters.AddWithValue("@Lname", OleDbType.VarWChar).Value = txtLname.Text
.Parameters.AddWithValue("@Fname", OleDbType.VarWChar).Value = txtFname.Text
.Parameters.AddWithValue("@Mname", OleDbType.VarWChar).Value = txtMname.Text
.Parameters.AddWithValue("@Gender", OleDbType.VarWChar).Value = cboGender.Text
.Parameters.AddWithValue("@Age", OleDbType.VarWChar).Value = lblcAge.Text
.Parameters.AddWithValue("@Bdate", OleDbType.DBDate).Value = cBdate.Value
.Parameters.AddWithValue("@Bplace", OleDbType.VarWChar).Value = txtBirthPlace.Text
.Parameters.AddWithValue("@Adrs", OleDbType.VarWChar).Value = txtAddress.Text
.Parameters.AddWithValue("@Contno", OleDbType.VarWChar).Value = txtContact.Text
.Parameters.AddWithValue("@CvStat", OleDbType.VarWChar).Value = cboCvstat.Text
.Parameters.AddWithValue("@wPos", OleDbType.VarWChar).Value = cboPos.Text
.Parameters.AddWithValue("@Mrate", OleDbType.Currency).Value = txtMrate.Text
.Parameters.AddWithValue("@Drate", OleDbType.Currency).Value = txtDrate.Text
.Parameters.AddWithValue("@Dept", OleDbType.VarWChar).Value = cboDept.Text
.Parameters.AddWithValue("@Agency", OleDbType.VarWChar).Value = cboAgency.Text
.Parameters.AddWithValue("@Dhired", OleDbType.DBDate).Value = cDhired.Value
.Parameters.AddWithValue("@Stat", OleDbType.VarWChar).Value = cboStat.Text
.Parameters.AddWithValue("@Phic", OleDbType.VarWChar).Value = txtphic.Text
.Parameters.AddWithValue("@Tin", OleDbType.VarWChar).Value = txtTin.Text
.Parameters.AddWithValue("@SSSn", OleDbType.VarWChar).Value = txtsss.Text
End With
MsgBox("Record has been successfully saved", MsgBoxStyle.Information, "Record Saved")
Call Clrfrm()
cmd.ExecuteNonQuery()
cmdEdit.Enabled = False
cmdDelete.Enabled = False
cmdSave.Enabled = False
Call fLock()
Catch ex As Exception
MsgBox(ex.Message)
Finally
If cnn.State = ConnectionState.Open Then
cnn.Close()
End If
End Try
我有一个问题,如果添加重复记录,如何在该代码上添加一个消息框,说明错误。