具有 Ms 访问权限的 C# Windows 窗体应用程序无法插入数据
Posted
技术标签:
【中文标题】具有 Ms 访问权限的 C# Windows 窗体应用程序无法插入数据【英文标题】:C# Windows Form App With Ms Access Failed to Insert Data 【发布时间】:2013-04-23 13:25:00 【问题描述】:我知道这个话题已经讨论过很多次了,但是我的问题还是没有解决..
好的,我有一个表格可以将注册数据插入 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();
消息框总是显示“添加成功”。
【问题讨论】:
【参考方案1】:我的一个项目中有这样的东西。也许它适合你:
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();
正如我所说,这对我有用。
【讨论】:
嗨,bema,谢谢,它正在工作,我不知道为什么,但它正在工作,哈哈 @Barzul 很高兴您可以使用它 - 但请重新考虑使用字符串连接或格式化来创建您的 SQL 语句。它打开了SQL injection attacks 的完成,这充其量可能会暴露敏感数据,最坏的情况是破坏您的数据库。【参考方案2】:OleDB 提供程序不支持命名参数。将您的 SQL 更改为
cmd.CommandText = @"Insert into tb_reg (id, name, dateBirth, blood_type)
Values(?,?,?,?)";
您可以在创建参数时为其命名,但它会将它们分配给?
占位符,按照它们添加到命令的顺序。
另请注意,您缺少blood_type
的参数。
无论您做什么,都不要更改为使用字符串连接。它为SQL Injection 攻击打开了大门。
【讨论】:
以上是关于具有 Ms 访问权限的 C# Windows 窗体应用程序无法插入数据的主要内容,如果未能解决你的问题,请参考以下文章
Windows 窗体 - C# - 要求管理员权限 [重复]
使用 C# windows 窗体向 Ms Access 数据库插入新记录时出现语法错误
在客户端笔记本电脑上使用 ms 访问的 windows 窗体应用程序的部署问题