2017-04-06 46 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注入。 –

+2

由於FN/LN沒有自動插入字符串,查詢失敗。 –

回答

3

在您的插入中,您嘗試將值增加爲FNLN。這些值在命令範圍中不存在,所以它不知道它在做什麼。你想要的是不是設置這些值作爲參數,然後用自己的價值,將命令添加他們:

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'佔位符我認爲 –

+0

不,如果您使用的是Access,它可以與@完美協作。重要的是以佔位符的相同順序保持對集合的添加。 – Steve

+0

@AlexK。它取決於驅動程序 –

0

你的代碼是打破,因爲FN和LN是C#變量,你試圖通過他們的查詢,因爲它是。這在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(); 

這應該可以解決您的問題。