VB.net 2010和Ms Access 2010数据库

时间:2016-03-09 03:27:48

标签: vb.net ms-access-2010

我在数据库中插入数据时遇到问题,我使用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

3 个答案:

答案 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

我有一个问题,如果添加重复记录,如何在该代码上添加一个消息框,说明错误。