2017-04-06 1 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を押しSAVEを更新:

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'ではなく'?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(); 

これで問題が解決するはずです。

関連する問題