2014-04-01 4 views
0

그물 및 SQL을 사용하여 액세스 데이터베이스에 데이터를 삽입하려고하면 아래 코드가 실행될 때 오류 메시지가 나타나고 con.open()이 강조 표시됩니다. 나는 왜 그것이 작동하지 않는지 이해하지 못한다. 당신이 다른 고급 SQL 문에 구문 오류를 볼 때 기본 데이터베이스에 대한 예약 된 키워드를 찾아,VB.NET SQL ACCESS INSERT 문

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles AddBut.Click 

     Dim dbProvider = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source= c:\Databse\Company_db.accdb" 
     Dim dbSource = "Data Source= C:\Databse\Company_db.accdb" 

     Dim empNum As String 
     Dim empFname As String 
     Dim empLname As String 
     Dim empDept As String 
     Dim empStat As String 
     Dim empYears As String 


     empNum = eNumText.Text 
     empFname = empFnameText.Text 
     empLname = empLnameText.Text 
     empDept = Deptd.Text 
     empStat = Statd.Text 
     empYears = yearstext.Text 




     Dim sql = "INSERT INTO tbl_empinfo (EmpID, FirstName, LastName, Department, Status, Years " & _ 
      ") " & _ 
      "Values(empNum, empFname, empLname, empDept, empStat, empYears)" 

     con.ConnectionString = dbProvider & dbSource 
     Using cmd = New OleDb.OleDbCommand(sql, con) 
      con.Open() 
      cmd.Parameters.AddWithValue("EmpID", empNum) 
      cmd.Parameters.AddWithValue("FirstName", empFname) 
      cmd.Parameters.AddWithValue("LastName", empLname) 
      cmd.Parameters.AddWithValue("Department", empDept) 
      cmd.Parameters.AddWithValue("Status", empStat) 
      cmd.Parameters.AddWithValue("Years", empYears) 
      cmd.ExecuteNonQuery() 

     End Using 


     con.Close() 
    End Sub 
+0

C : \ Databse \가 잘못 입력 했습니까? 아마도 C : \ Database \ – Fionnuala

+0

@Remou는 정말로 정확하게 내 폴더 이름입니다. ( – user3476579

답변

4

표준 문제를 감사드립니다.

경우에 따라 POSITION이라는 단어는 MS-ACCESS의 예약어입니다.
는 해당 쿼리에 다른 오류가, 그러나 대괄호

Dim sql = "INSERT INTO tbl_empinfo (EmpID, FirstName, LastName, Department, " & _ 
      "[Position], Status, Years) " & _ 
      "Values(empNum, empFname, empLname, empDept, empStat, empYears)" 

사이에 넣습니다. 삽입 할 필드가 7 개 있지만 POSITION 필드의 매개 변수 만 누락 한 경우 6 개의 매개 변수 만 전달합니다.

연결 문자열도 수정해야합니다. 당신은 쓰기

con.ConnectionString = dbProvider & dbSource 

하지만 잘못된 파일 이름

"Provider=Microsoft.ACE.OLEDB.12.0; Data Source= 
    c:\Databse\Company_db.accdbData Source= C:\Databse\Company_db.accdb" 

(가독성을 위해 분할 할 선)

+0

+1) @OP 또한 예약 된 키워드에 대한 링크를 참조하십시오. http://technet.microsoft.com/en-us/ 라이브러리/ms189822.aspx – Codemunkeee

+0

나는 당신의 충고를 따르려고 노력하고 http://pastebin.com/J1kFBFT9을 가지고 있지만 정확한 오류 "System.Data.OleDb.OleDbException '형식의 처리되지 않은 예외가 여전히 시스템에서 발생했습니다. .Data.dll 추가 정보 : 유효한 파일 이름이 아닙니다. "메시지 및 강조 표시 con.Open() 이유는 무엇입니까? – user3476579

+0

폴더 이름에 오타가 있습니까? C : \ Databse는 여전히 누락되었습니다. 7 번째 매개 변수 – Steve

0

에서이 결과는 당신이 "는 OleDbConnection"의 객체를 초기화 할 것을 고려한다.

데이터베이스의 속성 창에서 연결 문자열을 가져 오십시오 (서버 탐색기 창에서 데이터베이스 선택 속성 옵션을 마우스 오른쪽 단추로 클릭).

그리고 당신은 코드를 다음 연결 사용을 열 때 :

If con.State = ConnectionState.Closed Then 
     con.Open() 
    End If 

은 당신을 도움이되기를 바랍니다.