带有Ms Access的C#Windows窗体应用程序无法插入数据

时间:2013-04-23 13:25:00

标签: c# sql winforms ms-access oledb

我知道这个话题已经讨论很多次,但我仍然没有解决我的问题..

好的,我有一个表单可以将注册数据插入到MS Access Database(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();
         }

消息框始终显示“已成功添加”。

2 个答案:

答案 0 :(得分: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();  

正如我所说,这对我有用。

答案 1 :(得分:0)

OleDB提供程序不支持命名参数。将SQL更改为

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

您可以在创建参数时为其命名,但它会按照添加到命令的顺序将它们分配给?占位符。

另请注意,您缺少blood_type的参数。

无论你做什么,都不要改为使用字符串连接。它为SQL Injection攻击打开了大门。