2012-06-10 4 views
2

몇 시간 동안 디버깅을 한 후에도 솔루션을 찾을 수없는 문제가 있습니다.C# + MySQL + ExecuteNonQuery는 UPDATE에서 '1'을 반환하지만 DB에서는 변경되지 않습니다.

SQL 명령을 실행 한 후 C# 코드 측면에서 'ExecuteNonQuery()'를 실행 한 후 일부 값 (값이 ~ 5MB 정도의 텍스트)으로 행을 업데이트하려는 간단한 SQL 명령이 있습니다. '1'을 반환하고 예외는 발생하지 않지만 데이터베이스 행에 변경 사항이 반영되고 때로는 변경되지 않습니다.

디버깅을 시도하여 이전 값을 대체 할 값이 올바른지 확인했습니다. MySQL 5.5.11을 사용하고 있습니다.

  • MySQL 설정 일 수 있습니까?

당신이 어떤 생각을 가지고 있다면이 문제에 대해 내 마음을 잃어 버리면 크게 감사 할 것입니다.

코드는이만큼 간단하다 :

cmd.CommandText = "UPDATE user SET data = @data WHERE id = @id"; 

그때 내가 SQL 쿼리에 대한 DBCommand 객체에 PARAMS를 추가

편집, 코드를 포함한다. '데이터'는 약 5MB 크기입니다.

이 명령은 항상 반환 '1'변경 사항이 데이터베이스에 반영되지 않은 경우에도 (언젠가 작동, 언젠가는 나던) :

cmd.ExecuteNonQuery(); 

사전에 감사!

+2

몇 가지 코드를 게시하면 다음을 수행 할 수 있습니다. 1) ** 정확하게 ** ** 당신이하고있는 일과 ** ** 당신은 어떻게하고 있는지, 2) 우리는 아마 같은 문제를 재현 할 수 있습니다. – Arran

+1

나는 비슷한 문제가있어서 열을 제거하고 다시 만들었습니다. 왜 그런지 묻지 마라.MySql 드라이버에는 MS 제품에 몇 가지 문제가 있습니다. – rcdmk

+0

짧은 텍스트로 행을 업데이트하려고 시도 했습니까? – eflles

답변

0

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

SQL 문 또는 CommandType.Text의 명령에 의해 호출 저장 프로 시저에 매개 변수를 전달하는 물음표 (?) 자리를 지원하지 않는 SQL 서버에 대한 Microsoft .NET Framework 데이터 공급자. 이 경우 명명 된 매개 변수를 사용해야합니다. 예를 들어

:

SELECT * FROM Customers WHERE CustomerID = @CustomerID 

편집 : 그냥이 MySQL을, 그리고 내가 빨리 약를 닮아 아무것도 찾을 수는 없지만, 난 당신이 명명 된 매개 변수를 사용하는 것이 좋습니다 것 발견 어쨌든

+0

답장을 보내 주셔서 감사합니다.하지만 머리 꼭대기에서 코드 예제를 작성했습니다. 실제로 코드에서 @param을 사용하고 OP를 편집합니다. – Armkreuz

1

mysql 공급자가 자동 ​​커밋을 사용하는지 여부를 모르겠다. 그렇지 않다면 연결 객체에 대해 BeginTransaction으로 얻을 수있는 Transaction 객체에 대해 commit을 호출해야합니다.

+0

답장을 보내 주셔서 감사합니다,하지만 난 몰라하지만 트랜잭션 개체를 사용하고, 그래서 내가 왜 언젠가는 작동하지 언젠가 모르겠어요? – Armkreuz

0

이 문제가있어서 자동 커밋과 관련이 있습니다.

문제 : 이전의 앱 수명주기에서 자동 종료는 앱의 다른 프로세스에서 0으로 설정되어 실패했습니다. 자동 커밋이 해제 된 연결은 연결 풀에서 다시 사용됩니다.

예기치 않은 시간에 이러한 유형의 오류가 발생합니다.

+0

트랜잭션을 사용하지 않아도 발생합니다. COMMIT 없이는 아무것도 확약되지 않도록 연결이 설정되었습니다. –

관련 문제