尝试使用c#更新Ms Access 2007中的记录时出错

时间:2013-07-21 23:06:26

标签: c# ms-access-2007

尝试更新记录不知道为什么我会收到错误 异常详细信息:System.Data.OleDb.OleDbException:没有为一个或多个必需参数指定值。

这是我的代码请指导我。

  public static string lasttable;
  public static string newtable;

  newtable = "c" + cont.ToString();
  lasttable = input;

 string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\AGENTJ.AGENTJ-PC\Documents\Visual Studio 2010\WebSites\mfaridalam\App_Data\mfaridalam1.accdb;    Persist Security Info=False;";
      OleDbConnection conn = new OleDbConnection(connectionString);
                    conn.Open();
        string query = "UPDATE [LastInfo] SET [LastAlbum]=@newtable WHERE [LastAlbum]=@lasttable";
        OleDbCommand comd = new OleDbCommand();
        comd.Parameters.Add("@LastAlbum", OleDbType.VarChar);
        comd.Parameters["@LastAlbum"].Value = newtable;
        comd.CommandText = query;
        comd.Connection = conn;
        comd.ExecuteNonQuery();
        conn.Close();   

1 个答案:

答案 0 :(得分:1)

您正在使用OleDb而OleDb并不关心参数名称 但是,您需要为命令文本中存在的每个占位符添加一个参数,其顺序与它们出现的顺序相同 你有两个参数(@newtable@lasttable),但你只添加了一个参数(而且你的名字错误,但正如我所说,这对OleDb来说无关紧要)。

您需要添加第二个参数@lasttable

  string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\AGENTJ.AGENTJ-PC\Documents\Visual Studio 2010\WebSites\mfaridalam\App_Data\mfaridalam1.accdb;    Persist Security Info=False;";
  using(OleDbConnection conn = new OleDbConnection(connectionString))
  {
      conn.Open();
      string query = "UPDATE [LastInfo] SET [LastAlbum]=@newtable WHERE [LastAlbum]=@lasttable";
      OleDbCommand comd = new OleDbCommand();

      comd.Parameters.Add("@newTable", OleDbType.VarChar);
      comd.Parameters["@newTable"].Value = newtable;

      comd.Parameters.Add("@lastTable", OleDbType.VarChar);
      comd.Parameters["@lastTable"].Value = lasttable;

      comd.CommandText = query;
      comd.Connection = conn;
      comd.ExecuteNonQuery();
  }