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

时间:2012-11-18 07:32:20

标签: c# ado.net oledb

我有以下代码尝试将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");
   }
}

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

4 个答案:

答案 0 :(得分:2)

应该不是

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

是:

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

等其他参数?

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

确保您的数据库存在于您的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");
   }
}

答案 3 :(得分:-1)

你的插入语句应该像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);

试试这个