2017-04-06 8 views
0

에 삽입하십시오. Microsoft Access에 연결하여 데이터베이스에 기록하는 방법을 배우고 있습니다. 내가 Access에 데이터베이스를 만들고 데이터를 삽입하고 싶습니다.왜 SQL 문에 오류가 있다고합니까?

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Amin\Desktop\NamesDatabase1.accdb"); 

OleDbCommand cmd = new OleDbCommand(); 
string FN = textBox1.Text; 
string LN = textBox2.Text; 

cmd.CommandText = "INSERT INTO Names (FirstName, LastName) Values (FN,LN)"; 
cmd.Connection = conn; 

conn.Open(); 
cmd.ExecuteNonQuery(); 

실행하기 전에 오류가없는 것 같습니다. 나는 textBox1.texttextBox2.text를 눌러 저장 한 후 나는 오류 얻을 내 프로그램 업데이트를 실행합니다

SYNTAX ERROR in SQL statement Insert into

내가 무슨 일을 했는가를?

+0

다음과 같은 매개 변수를 사용하는 습관이 필요합니다. http://stackoverflow.com/questions/5893837/using-parameters-inserting-data-into-access-database이 문제를 해결하고 안전하게 유지합니다. SQL Injection에서. –

+2

FN/LN이 문자열에 자동으로 삽입되지 않기 때문에 쿼리가 실패합니다. –

답변

3

삽입시 값 FNLN을 추가하려고합니다. 이러한 값은 명령 범위에 없기 때문에 명령 범위와 관련이 없습니다. 당신이 원하는 것은 매개 변수로 해당 값을 설정 한 다음 명령에 대한 자신의 값을 추가하는 대신입니다 : FN 및 LN은 C#을 변수이기 때문에

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Amin\Desktop\NamesDatabase1.accdb"); 
OleDbCommand cmd = new OleDbCommand(); 
string FN = textBox1.Text; 
string LN = textBox2.Text; 
cmd.CommandText = "INSERT INTO Names (FirstName, LastName) Values (@FN,@LN)"; 
cmd.Connection = conn; 
cmd.Parameters.Add(new OleDbParameter("@FN", FN)); 
cmd.Parameters.Add(new OleDbParameter("@LN", LN)); 
conn.Open(); 
cmd.ExecuteNonQuery(); 
+1

oledb에는'@ IDENTIFIER' 대신에'? IDENTIFIER'가 필요합니다. –

+0

아니요, Access를 사용하는 경우 @와 완벽하게 작동합니다. 중요한 것은 자리 표시 자와 동일한 순서로 컬렉션에 추가를 유지하는 것입니다. – Steve

+0

@AlexK 그것은 운전사에 달려있다 –

0

당신의 코드가 파괴되고, 당신은 그것을로 쿼리를 전달하는 데 노력하고있다 입니다. 그렇다고해서 SQL에서 올바른 구문이 나오지는 않습니다.

매개 변수로 FN 및 LN을 쿼리에 전달해야합니다.

코드를 다음과 같이 변경하십시오.

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Amin\Desktop\NamesDatabase1.accdb"); 
OleDbCommand cmd = new OleDbCommand(); 
string FN = textBox1.Text; 
string LN = textBox2.Text; 
cmd.CommandText = "INSERT INTO Names (FirstName, LastName) Values (@FN,@LN)"; 
cmd.Parameters.Add(new OleDbParameter("@FN", FN)); 
cmd.Parameters.Add(new OleDbParameter("@LN", LN)); 
cmd.Connection = conn; 
conn.Open(); 
cmd.ExecuteNonQuery(); 

이렇게하면 문제가 해결됩니다.