2012-11-24 4 views
1

Access 데이터베이스를 사용하는 Visual Basic 프로젝트가 있습니다. 쿼리를 실행하지만 데이터베이스 테이블에 새 데이터가 표시되지 않습니다. 예외 나 오류가 없습니다. 이 대신 성공 메시지 상자가 표시됩니다.올바른 코드이지만 데이터베이스에 삽입 할 수 없습니다.

Dim ID As Integer = 2 
    Dim TableNumber As Integer = 2 
    Dim OrderDate As Date = Format(Now, "General Date") 
    Dim TotalPrice As Double = 100.0 
Dim ConnectionString As String = "myconnectionstring" 
    Dim con As New OleDb.OleDbConnection(ConnectionString) 


    Try 
     Dim InsertCMD As OleDb.OleDbCommand 

     InsertCMD = New OleDb.OleDbCommand("INSERT INTO Orders([ID],[TableNumber],[OrderDate],[TotalPrice]) VALUES(@ID,@TableNumber,@OrderDate,@TotalPrice);", con) 
     InsertCMD.Parameters.AddWithValue("@ID", ID) 
     InsertCMD.Parameters.AddWithValue("@TableNumber", TableNumber) 
     InsertCMD.Parameters.AddWithValue("@OrderDate", OrderDate) 
     InsertCMD.Parameters.AddWithValue("@TotalPrice", TotalPrice) 

     con.Open() 
     InsertCMD.ExecuteNonQuery() 
     MessageBox.Show("Successfully Added New Order", 
         "Success", MessageBoxButtons.OK, MessageBoxIcon.Information) 
     con.Close() 
    Catch ex As Exception 
     'Something went wrong 
     MessageBox.Show(ex.ToString) 
    Finally 
     'Success or not, make sure it's closed 
     If con.State <> ConnectionState.Closed Then con.Close() 
    End Try 

문제가 무엇인가 여기 내 코드?

+0

ID는 자동 번호 열입니까? – Steve

+0

autoincrement를 사용하고 사용하지 않았지만 아무 것도 작동하지 않았습니다. – Dchris

+0

데이터베이스 복사본을 업데이트하지 않습니까? http://stackoverflow.com/questions/13515419/vb-net-access-db-insert-not-inserting-data – Fionnuala

답변

1

두 가지 중 하나가 발생합니다. 데이터가 업데이트되지 않거나 업데이트 중이며 이후에 데이터를 찾을 때 누락되었습니다. ExecuteNonQuery는 일반적으로 작업 행 수를 반환합니다. 0 일 경우 예외없이 실패 할 가능성이 있습니다. 이것은 중복 된 ID와 관련이있을 수 있습니다.

성공적으로 삽입하는 경우 어떤 이유로 새 레코드가 표시되지 않습니다. 어쩌면 당신이 틀린 장소를 찾고 있거나 어쩌면 기록이 어떤 이유로 질의에 나타나지 않았을 수도 있습니다. 나는 기본적으로 "중복 업데이트"가있는 항목을 알지 못하지만 Access에 문제가 발생할 수있는 경우에는 알 수 있습니다.

나는 조금 다른 어쩌면 액세스에 연결,하지만 난 당신이 아마 데이터베이스에 연결하지 않는 것이 같은 연결 문자열과 상상 델파이와 ADO를 사용하여 문자열 = "myconnectionstring"

으로

1

희미한를 ConnectionString 그것만을 업데이트하자.

con.Open()은 연결 성공 또는 실패를 나타내는 일종의 결과를 반환하는 함수 일 가능성이 큽니다. Open 및 ExecuteNonQuery 명령이 실패해도 예외가 발생하지 않을 수도 있습니다.이 경우 성공 메시지는 연결이 성취되었는지 여부를 표시합니다. 예외 만이 유일한 오류 유형은 아닙니다. 일반적으로 함수가 성공 또는 실패를 나타내는 결과를 반환하는 경우 조건문에서 해당 함수를 쿼리하여 오류 메시지를 처리할지 여부를 결정해야합니다. 예외 처리기에서 코드를 묶는 것이 지연되고 많은 경우에 유용하지 않습니다.

0

내가 볼 수있는 유일한 문제는 데이터베이스의 ID 필드가 자동 증가 필드 인 경우입니다. 그렇지 않으면 작동해야합니다. 또한, 나는 다음과 같은 방법을 찾을 훨씬 간단

Me.OrdersTableadapter.insert (ID, tableNumber, 주문일, TotalPrice) 'NB 다음과 같이 새로운 데이터를 삽입하도록 설정 테이블 어댑터와 데이터를 사용하여 매개 변수를 이 메서드는 테이블 열 순서대로됩니다 Me.OrdersTableadapter.Fill (me.Dataset.Orderstableadapter)

관련 문제