具有 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 窗体应用程序无法插入数据的主要内容,如果未能解决你的问题,请参考以下文章

c# windows 窗体 如何 设置菜单的权限

Windows 窗体 - C# - 要求管理员权限 [重复]

使用 C# windows 窗体向 Ms Access 数据库插入新记录时出现语法错误

在客户端笔记本电脑上使用 ms 访问的 windows 窗体应用程序的部署问题

win 10 C#解决访问长路径失败,并指定程序具有admin权限

c# windows窗体(添加信息以访问数据库)[关闭]