7

データベースにデータを挿入中にエラーが発生しました。

エラーは次のとおりです。

「クエリ値と宛先フィールドの数が同じではありません」。

コードを挿入:

OleDbConnection vconn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Mutyyba\\Documents\\Database1.accdb");
vconn.Open();

string name = textBox1.Text;
string address = textBox3.Text;
int rollno = Convert.ToInt32(textBox2.Text);

string vquery = "insert into Table1 values(@vname,@vrollno,@vaddress)";

OleDbCommand vcomm = new OleDbCommand(vquery, vconn);
vcomm.Parameters.AddWithValue("@vname", name);
vcomm.Parameters.AddWithValue("@vrollno", rollno);
vcomm.Parameters.AddWithValue("@vaddress", address);

vcomm.ExecuteNonQuery();

MessageBox.Show("your record has been recorded sucessfully!");

vconn.Close();

私は何を間違っていますか?

4

4 に答える 4

6

一重引用符をいくつか見逃しただけだと思います。すべてのパラメータを最初と最後の一重引用符で囲んでいるようです。これを見る

もう 1 つ、多くのパラメーターを渡しているので、パラメーター用の SqlCommand オブジェクトを準備します。詳細については、 msdnを参照してください。

このようなことをしてください:

  SqlCommand comm = new SqlCommand("INSERT INTO table VALUES (@txtsno, @txtdesg, @txtbasic)", connection);

  comm.Parameters.AddWithValue("@txtsno", txtsno.Text.Trim());

  comm.Parameters.AddWithValue("@txtsno", txtdesg.Text.Trim());

  comm.Parameters.AddWithValue("@txtsno", txtbasic.Text.Trim());

これはより明確であり、 SQL インジェクションの傾向がありません。

于 2011-11-08T05:22:44.347 に答える
2

SQL で列名を指定する必要があります。または、値の順序がテーブルの既定のスキーマとまったく同じ (番号と順序) である必要があります。

OleDbCommand cmd = new OleDbCommand("insert into real (name, symbol, date, red, redby, redsell, sbintrabuy, sbtr1, sbtr2, sbtr3, sbintersell, sbtr1, sbtr2, sbtr3, rstl, green) values('" + Name + "','" + Symbol + "','" + Date + "','" + Red + "','" + RedBuy + "','" + RedSell + "','" + SBIntraBuy + "','" + SBTR1 + "','" + SBTR2 + "','" + SBTR3 + "','" + SBIntraSell + "','" + SBTR1 + "','" + SBTR2 + "','" + SBTR3 + "','" + RSTL + "','" + Green + "');", con);

太字の列を正しい名前に置き換えます。列名を明示的に指定することをお勧めします。

文字列値は、単一の割り当てで回避する必要があります

通常、次のように sql を記述します。

cmd.Parameters.Add("var", System.Data.OleDb.OleDbType.VarChar); cmd.Parameters["var"].Value = 'somevalue';

あなたのSQLでは、「実際の(列1)値(@var)に挿入」のようにする必要があります。

====

上記のように回答を更新しました。問題が解決することを願っています。

于 2011-11-08T05:22:56.060 に答える