2016-09-05 4 views
2

"검색"패턴이 매개 변수에 저장되어있는 데이터베이스의 각 행에 대해 업데이트/바꾸기 기능을 수행하려는 아래 코드가 있습니다. 그러나 VB.NET 프로그램에서 쿼리를 실행하면 프로그램에서 해당 프로그램이 실행되는 행을 건너 뜁니다.매개 변수화 된 쿼리에서 Replace() 함수 사용

예를 들어 intQuestionID 변수가 4로 설정되었다고 가정하십시오. QuestionStacks 테이블 내에서 값은 ;4;0;14;24;34;입니다. SQL은 첫 번째 ;4;;0;으로 대체해야하지만 그렇지 않습니다. 사실, 아무것도 변경되지 않습니다. 값이 ;4; 인 경우에도 마찬가지입니다.

Dim sqlClearQuestion As New OleDb.OleDbCommand("UPDATE QuestionStacks SET QuestionData = REPLACE([QuestionData], "";@0;"", "";0;"") ", DBConnection) 
sqlClearQuestion.Parameters.AddWithValue("@0", intQuestionID) 
sqlClearQuestion.ExecuteNonQuery() 

Access 2016의 쿼리 작성기에서 SQL을 실행하여이 쿼리를 검사했는데 의도 한대로 작동합니다. 그러나이 VB.NET 함수에서 사용하려고하면 원하는 결과가 나오지 않습니다. 이것을 위해 어떤 변화가 필요합니까?

N.B. Access SQL에 .AddWithValue이 필요하지 않으며 실제로 다른 것으로 변경되었음을 알고 있습니다 (Read : https://stackoverflow.com/a/6794245/692250). 그러나 하나의 매개 변수 만 있으면 문제가 발생하지 않습니다.

+1

명령이 정상적으로 보입니다. 디버깅을 위해 매개 변수없이 시도하십시오 (예 : 원하는 값을 하드 코드하십시오). 이것은 거래 내에서가 아니라 오른쪽 DB를 가리키고 있는지 확인하는 것입니다. – FloatingKiwi

+0

@FloatingKiwi, 그랬습니다. 그리고 Access DB를 보면 원하는 결과를 얻을 수 있습니다. –

답변

1

구분 기호 나 매개 변수 자리 표시자를 둘러싼 다른 장식을 볼 때 항상 의심스러운 내용이어야합니다. 매개 변수 자리 표시 자은 매개 변수 의 필수 특수 문자와 함께 혼자만 나타나야합니다. 예를 들어, 매우 일반적인 실수를 시도하고 올바른 접근 방식은 특정 경우

' good 
cmd.CommandText = "SELECT * FROM Students WHERE FirstName LIKE ?" 
cmd.Parameters.AddWithValue("?", theName & "%") 

를 사용하는 경우

' no good 
cmd.CommandText = "SELECT * FROM Students WHERE FirstName LIKE '?%'" 
cmd.Parameters.AddWithValue("?", theName) 

을 사용하는 것입니다, 당신은 사용할 수 있습니다

cmd.CommandText = "UPDATE QuestionStacks SET QuestionData = REPLACE([QuestionData], ?, "";0;"") " 
cmd.Parameters.AddWithValue("?", ";" & intQuestionID & ";") 
+0

정확한 반응이 저에게 완벽했습니다. –

+0

이제'LIKE' 연산자에 대해 왜 작동하지 않는지 알아 내야합니다. –

관련 문제