我知道这个话题已经讨论很多次,但我仍然没有解决我的问题..
好的,我有一个表单可以将注册数据插入到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();
}
消息框始终显示“已成功添加”。
答案 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攻击打开了大门。