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 回答