2013-04-04 2 views
0

저는 벽에 머리를 맞고 "UPDATE 문에서 구문 오류"라는 애매한 오류가 발생했습니다. 아무도 내 업데이트 성명서에 문제가 있다고 말해 줄 수 있습니까? 당신은 처음 "필드 = 값"있어Access 데이터베이스에서 하나의 부울 필드를 업데이트하십시오. C#

UPDATE table SET field = value WHERE field = value; 

: @ Q1-쉬운 필드 이름이나 값이지만, 당신이 뭔가에 필드를 설정해야하는 경우

try 
{ 
    OleDbConnection ECon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\zoofari\zoofari\zoofari\bin\Debug\MainData.accdb"); 
    OleDbDataAdapter EdAdapt = new OleDbDataAdapter(); 
    EdAdapt.UpdateCommand = new OleDbCommand("UPDATE tbl_Results SET @Q1-Easy WHERE Username = '" +txtUname.Text+ "'", ECon); 
    EdAdapt.UpdateCommand.Parameters.Add("@Q1-Easy", OleDbType.Boolean).Value = true; 

    ECon.Open(); 
    EdAdapt.UpdateCommand.ExecuteNonQuery(); 
    ECon.Close(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

답변

2

업데이트 할 필드 이름은 어디입니까? 업데이트 명령에 필요한 구문은 쿼리 대신 당신이 SQL 명령을 구축하기 위해 문자열 연결을 사용하지 않을 것을 또한

EdAdapt.UpdateCommand = new OleDbCommand("UPDATE tbl_Results" + 
         " SET FIELDNAME= @Q1-Easy WHERE Username = '" +txtUname.Text+ "'", ECon); 
           ^^^^^^^^^^   

주를 업데이트 할 필드가 없습니다

UPDATE <tablename> SET <Field> = <value> WHERE <keyfield> = <value> 

입니다.
항상 매개 변수가있는 쿼리를 사용하십시오. (당신은 다른 하나를 사용하지 왜 이미이 쿼리에 매개 변수를 가지고?)

에 대한 필드 이름 아래에 댓글이 다음 코드 내가 사용하여 추가 한

string sqlText = "UPDATE tbl_Results SET [Q1-Easy] = ? WHERE Username = ?"; 
using(OleDbConnection ECon = new OleDbConnection(.....)) 
using(OleDbCommand cmd = new OleDbCommand(sqlText, ECon)) 
{ 
    ECon.Open(); 
    cmd.Parameters.Add("@Q1Value", OleDbType.Boolean).Value = true; 
    cmd.Parameters.Add("@uname", OleDbType.VarChar).Value = txtUname.Text; 
    cmd.ExecuteNonQuery(); 
} 

이 방법으로 변경 될 수 있습니다 불여일견 문이 닫혀 버렸을 때 처리가 완료되었는지 확인하고 -이 필드 이름의 유효한 문자로 받아 들여지지 않았기 때문에 필드 이름을 대괄호로 묶었습니다.

OleDb에서 매개 변수 자리 표시자는 간단한 것일 수 있습니다. 자리 표시자가 텍스트에 나타나는 순서에 따라 컬렉션에 추가하는 것이 매우 중요합니다. OleDb는 매개 변수 자리 표시자를 이름으로 인식하지 못합니다.

+0

안녕하세요 스티브, Q1 - 쉬운 Fieldname입니다, 나는 그 값을 false에서 true로 변경하려고합니다. 이것에 대해 갈 길이 멀어 졌습니까? – LHammy

+0

죄송합니다. 빠른 게시를 의미하지는 않았습니까?이 업데이트는 맞습니까? EdAdapt.UpdateCommand = 새 OleDbCommand ("UPDATE tbl_Results"+ "SET @ Q1-Easy = true 사용자 이름 = '"+ txtUname.Text + "'", ECon); – LHammy

+0

아니요, 사실 작동하지 않습니다. 값을 문자열에 직접 넣으려면 -1을 전달합니다 (SqlServer가 1을 원할 때 Access에 있음). 내가 말했듯이. 항상 매개 변수화 된 쿼리를 사용하십시오. 봐 [SQL 주입 문제는 여기에] (http://stackoverflow.com/questions/332365/how-does-this-sql-injection-work) – Steve

0

확실하지 않음 부분 오류.

관련 문제