2012-11-19 84 views
2

我正在使用Access数据库的.Net桌面应用程序。我正在使用“联系人”表单并试图更改“类别”字段,该字段在值的组合框中有多个选项。我试图设置的值在选项列表中,但它什么也没有做。这是我的代码。请澄清一下发生了什么。该代码似乎适用于DELETE命令。Access 2007数据库未更新

 string list = string.Join(", ", f); 

     string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtDB.Text + ""; 

     string ComStr = "UPDATE Contacts SET Category = ? where [E-mail Address] in (?)"; 
     using (OleDbConnection con = new OleDbConnection(ConnStr)) 
     { 
      con.Open(); 
      using (OleDbCommand com = new OleDbCommand(ComStr, con)) 
      { 
       com.Parameters.AddWithValue("List", list); 
       com.Parameters.AddWithValue("Category", "Не получава мейли"); 
       com.ExecuteNonQuery(); 
      } 
      con.Close(); 
     } 
+2

您必须按照与查询中出现的顺序相同的顺序添加参数。 – Fionnuala

回答

0

我认为这应该工作: -

string ComStr = "UPDATE Contacts SET Category = @Category where [E-mail Address] in @List"; 
      using (OleDbConnection con = new OleDbConnection(ConnStr)) 
      { 
       con.Open(); 
       using (OleDbCommand com = new OleDbCommand(ComStr, con)) 
       { 

        com.Parameters.AddWithValue("@Category", "Не получава мейли"); 
        com.Parameters.AddWithValue("@List", list); 
        com.ExecuteNonQuery(); 
       } 
       con.Close(); 
      } 
+0

它仍然不会对数据库做任何事情。 –

0

我找到了答案。列表中的每个项目必须是在...好吧,我不知道这个词,但这里是我的工作代码:

string list = string.Join("', '", f); 
    string l = "'" + list + "'"; 

    string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtDB.Text + ""; 

    string ComStr = "UPDATE Contacts SET Category = @Category where [E-mail Address] in (" + l + ")"; 
    using (OleDbConnection con = new OleDbConnection(ConnStr)) 
    { 
     con.Open(); 
     using (OleDbCommand com = new OleDbCommand(ComStr, con)) 
     { 

      com.Parameters.AddWithValue("Category", "Не получава мейли"); 
      com.ExecuteNonQuery(); 
     } 
     con.Close(); 
    } 

感谢您的提示和时间的家伙。