2016-03-09 2 views
1

У меня проблема при вставке данных в моей базе данных, я использую OLEDB, это всегда показывает ошибку:VB.net 2010 и Ms Access 2010 базы данных

"Syntax error in Insert Into Statement"

Вот мой код для save button:

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

но я не могу найти, где ошибка в моем коде, пощечина. Я просто попытаюсь снова отладить его и попробовать другой метод. – jacksparrow012

ответ

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 

Текст не является Целочисленным!

+0

Я уже добавляю запятые, но ошибка по-прежнему сохраняется. Можете ли вы предложить лучший способ улучшить мой код или любую ревизию, чтобы я мог вставлять данные, которые я хочу в свою базу данных. – jacksparrow012

+0

Я изменяю целое число на varwchar, оно не разрешает мою проблему, я просто пересмотрю свой код. Спасибо за помощь. – jacksparrow012

0

Вы, возможно, придется уважать типы данных - как здесь:

cmd.Parameters.AddWithValue("@p17", OleDbType.DBDate).Value = Convert.ToDateTime(txtDhired.Text) 
0

Я наконец-то нашел ошибку на моем синтаксисе, я использовал неправильный тип данных и зарезервированное слово в vb.net «Позиция» I думать.

вот мой код, который работает отлично, спасибо за помощь:

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 

У меня есть вопрос, как я могу поставить MessageBox на тот код, который говорит об ошибке, если добавить дубликат записи.