繁体   English   中英

无法使用 c# 中的参数化查询在 MS Access 中插入数据

[英]Unable to insert data in MS Access using parameterized query in c#

我有以下代码尝试将 3 个文本框的 e 值存储到 MS Access 2007 数据库中。

string ConnString = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\dxs.accdb");
string SqlString = "Insert Into tests( [Nam], [add], [phone]) Values (?,?,?)";

using (OleDbConnection conn = new OleDbConnection(ConnString))
{
   using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
   {
      cmd.CommandType = CommandType.Text;
      cmd.Parameters.AddWithValue(@"Nam", textBox1.Text);
      cmd.Parameters.AddWithValue(@"add", textBox2.Text);
      cmd.Parameters.AddWithValue(@"phone",textBox3.Text);

      conn.Open();
      cmd.ExecuteNonQuery();
      MessageBox.Show("entered");
   }
}

但即使输入值后代码正确,表中也没有存储任何内容。

不应该

cmd.Parameters.AddWithValue(@"Nam", textBox1.Text);

是:

cmd.Parameters.AddWithValue("@Nam", textBox1.Text);

等等其他参数?

当我遇到类似问题时,解决方案是:

如果数据库是应用程序的一部分,则可以将其复制到bin文件夹中 - 然后应用程序使用它。 这就是为什么您无法使用 MS Access 客户端在数据表中找到更改的原因。

确保您的数据库存在于项目的exe文件所在的 output(bin) 文件夹中。 如果没有,则将其复制到那里。 database文件放在正确的位置后,您将看到更改。

此外,您还需要对代码进行少量更改,您的参数有问题。 Values (?,?,?)更改为Values (@Nam,@add,@phone)";并将@"Nam"更改为"@Nam" 。请参阅评论Correction1 and Correction2

当您在字符串开头使用@时,也无需使用双斜杠\\\\

string ConnString=@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\dxs.accdb");

string sql="Insert Into tests([Nam],[add],[phone]) Values (@Nam,@add,@phone)";
// Correction 1: Above line is changed ?,?,? to parameter names (names used by your command)

using (OleDbConnection conn = new OleDbConnection(ConnString))
{
   using (OleDbCommand cmd = new OleDbCommand(sql, conn))
   {
      cmd.CommandType = CommandType.Text;
      cmd.Parameters.AddWithValue("@Nam", textBox1.Text);
      cmd.Parameters.AddWithValue("@add", textBox2.Text);
      cmd.Parameters.AddWithValue("@phone",textBox3.Text);
      // Correction 2: your parameter names are changed @"xyz" to "@xyz"

      conn.Open();
      cmd.ExecuteNonQuery();
      MessageBox.Show("entered");
   }
}

你的插入语句应该像 dis

    string SqlString = "Insert Into tests( [Nam], [add], [phone]) Values (@Nam, @add, @phone)";


   cmd.CommandType = CommandType.Text;
  cmd.Parameters.AddWithValue("@Nam", textBox1.Text);
  cmd.Parameters.AddWithValue("@add", textBox2.Text);
  cmd.Parameters.AddWithValue("@phone",textBox3.Text);

尝试这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM