1

このトピックはすでに何度も議論されていることは知っていますが、まだ問題が解決されていません..

わかりました、MS Access データベース (2007) に登録データを挿入するフォームがありますが、コードはデータベースにデータを挿入せず、エラーはありません。コードは次のとおりです。

OleDbConnection cn = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Data/db_klinik.mdb");
OleDbCommand cmd = new OleDbCommand();
OleDbDataAdapter adapter = new OleDbDataAdapter(); 


 private void btnSave_Click(object sender, EventArgs e)
        {

string idCard = this.txtID.Text;
string name = this.txtName.Text;
DateTime dateBirth = this.dateEdit1.DateTime;

cn.Open();
cmd.CommandText = "Insert into tb_reg (id, name, dateBirth, blood_type) Values(@id,@name,@dateBirth)";

                    cmd.Parameters.AddWithValue("@id", idCard);
                    cmd.Parameters.AddWithValue("@name", name);                    
                    cmd.Parameters.AddWithValue("@dateBirth", dateBirth.ToString());

adapter.InsertCommand = cmd;
                    int result = cmd.ExecuteNonQuery();

                    if (result > 0)
                        MessageBox.Show("Succesfully added");
                    else
                        MessageBox.Show("try again");
                    cn.Close();
         }

メッセージ ボックスには常に「正常に追加されました」と表示されます。

4

2 に答える 2

0

私は私のプロジェクトでこのようなものを持っていました。多分それはあなたのために働く:

string insertString = string.Format(CultureInfo.InvariantCulture, "INSERT INTO tb_reg VALUES ('{0}', '{1}', '{2}', {3})", idCard, name, dateBirth, blood_type); 
OleDbCommand cmd = new OleDbCommand(insertString, new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Data/db_klinik.mdb"));
cmd.Connection.Open();

int numberAdded = cmd.ExecuteNonQuery();

if (numberAdded < 1)
{
     //do something, the data was not added
}
else
{
     //be happy :)
}
cmd.Connection.Close();  

私が言ったように、それは私のために働いた。

于 2013-04-23T13:55:53.020 に答える
0

OleDB プロバイダーは、名前付きパラメーターをサポートしていません。SQLを次のように変更します

cmd.CommandText = @"Insert into tb_reg (id, name, dateBirth, blood_type)
                    Values(?,?,?,?)";

パラメータを作成するときに名前を付けることができますが?、コマンドに追加された順序でプレースホルダに割り当てられます。

のパラメーターが欠落していることにも注意してくださいblood_type

何をするにしても、文字列連結を使用するように変更しないでください。これは、 SQL インジェクション攻撃への扉を開きます。

于 2013-04-23T14:05:24.733 に答える