OleDbCommand
및 매개 변수를 사용하여 내 레코드를 성공적으로 삽입했지만 레코드를 업데이트하면 다음 오류가 발생합니다.
구문 오류!
필드 이름을 대괄호로 묶어 보았지만 여전히 작동하지 않습니다. 그러나 명령을 복사하여 Access 쿼리로 업데이트하면 작동합니다.
암호:
Public Function update() As Boolean
Dim STATE As Boolean = False
Dim cmd As New OleDbCommand
cmd.Connection = cn
cmd.CommandType = CommandType.Text
cmd.CommandText = "UPDATE [GUEST_DATA_TBL] SET [USD]=@USD, [RIEL]=@RIEL, [EURO]=@EURO, [BAHT]=@BAHT, [AUSD]=@AUSD, [GIFT]=@GIFT, [MEMO]=@MEMO WHERE [ID]=@ID"
AssignParams(cmd)
cmd.ExecuteNonQuery()
Return STATE
End Function
'the parameters
Private Sub AssignParams(cmd As OleDbCommand)
cmd.Parameters.AddWithValue("@ID", ID)
cmd.Parameters.AddWithValue("@USD", USD)
cmd.Parameters.AddWithValue("@RIEL", RIEL)
cmd.Parameters.AddWithValue("@BAHT", BAHT)
cmd.Parameters.AddWithValue("@EURO", EURO)
cmd.Parameters.AddWithValue("@AUSD", AUSD)
cmd.Parameters.AddWithValue("@GIFT", GIFT)
cmd.Parameters.AddWithValue("@MEMO", MEMO)
End Sub
먼저 이미 매개 변수를 사용하고 있지만 MS Access에서는 매개 변수의 순서가 이름이 아니라 중요하다는 것을 확인하는 것이 좋습니다. ?
매개 변수를 사용할 때 SQL 명령 내 에서 자리 표시자를 사용합니다 . 또한 데이터 유형을 지정하므로 OleDbParameter 생성자 (String, OleDbType) 를 사용하여 매개 변수를 추가하는 것이 좋습니다.
다음을 사용하여 구현하는 것도 고려할 것입니다 .
관리되는 리소스는 사용자가 별도의 코딩없이 .NET Framework GC (가비지 수집기)에 의해 폐기됩니다. 관리 자원에는 Using 블록이 필요하지 않습니다. 그러나 여전히 Using 블록을 사용하여 가비지 수집기를 기다리는 대신 관리 리소스를 강제로 폐기 할 수 있습니다.
ExecuteNonQuery () 에서 반환 된 값에 대한 검사를 구현하여 영향을받은 행 수를 확인할 수 있습니다.
마지막으로 VB.NET에서는 여기에 수정자를 지정하지 않습니다. Private Sub AssignParams(cmd As OleDbCommand)
, 컴파일러는 기본적으로 ByVal 을 사용합니다 .
호출 된 프로 시저 또는 속성이 호출 코드에서 인수의 기본 변수 값을 변경할 수없는 방식으로 인수가 전달되도록 지정합니다.
ByRef를 사용해야합니다 .
호출 된 프로 시저가 호출 코드에서 인수의 기본 변수 값을 변경할 수 있도록 인수가 전달되도록 지정합니다.
코드는 다음과 같습니다.
Public Function update() As Boolean
Dim STATE As Boolean = False
Using con As OleDbConnection = cn,
cmd As New OleDbCommand("UPDATE [GUEST_DATA_TBL] SET [USD]=?, [RIEL]=?, [EURO]=?, [BAHT]=?, [AUSD]=?, [GIFT]=?, [MEMO]=? WHERE [ID]=?", con)
con.Open()
AssignParams(cmd)
Dim rowsAffected As Integer = cmd.ExecuteNonQuery()
If rowsAffected > 0 Then
STATE = True
End If
End Using
Return STATE
End Function
Private Sub AssignParams(ByRef cmd As OleDbCommand)
cmd.Parameters.Add("@USD", OleDbType.[Type]).Value = USD
cmd.Parameters.Add("@RIEL", OleDbType.[Type]).Value = RIEL
cmd.Parameters.Add("@EURO", OleDbType.[Type]).Value = EURO
cmd.Parameters.Add("@BAHT", OleDbType.[Type]).Value = BAHT
cmd.Parameters.Add("@AUSD", OleDbType.[Type]).Value = AUSD
cmd.Parameters.Add("@GIFT", OleDbType.[Type]).Value = GIFT
cmd.Parameters.Add("@MEMO", OleDbType.[Type]).Value = MEMO
cmd.Parameters.Add("@ID", OleDbType.[Type]).Value = ID
End Sub
내가
OleDbType.[Type]
.[Type]
데이터베이스에서 사용한 데이터 유형 으로 바꾸고 싶을 것 입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다