代码运行但不更新数据库

时间:2016-01-07 14:10:42

标签: c# sql ms-access

此代码应该将文本框中的某些值保存到特定行。代码运行得很好,没有打嗝,但无论我做什么,都拒绝实际更新数据库。

try
{
    using (var con = new OleDbConnection())
    {
        con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\User\Desktop\esoft\gym\gym\bin\Debug\Clients.accdb;";
        con.Open();

        using (var com = new OleDbCommand())
        {
             com.Connection = con;
             com.CommandText = "UPDATE gym SET BMI = @bmi and Health = @health and weight_change_to_healthy_bmi = @weight WHERE ID = @id";

             com.Parameters.AddWithValue("@bmi", bmi.Text);
             com.Parameters.AddWithValue("@health", health.Text);
             com.Parameters.AddWithValue("@weight", change.Text);
             com.Parameters.AddWithValue("@id", id.Text);

             com.ExecuteNonQuery();
         }
     }

     MessageBox.Show("Saved");
 }
 catch (Exception ex)
 {
     MessageBox.Show("Not saved: " + ex.Message);
 }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

作为Alex mentionedSET部分需要,代替AND多个列。

检查UPDATE syntax 1 ;

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

但我想多说一些事情;

  • 尽可能多地使用AddWithValueIt may generate unexpected and surprising results sometimes。使用Add方法重载来指定参数类型及其大小。
  • 在执行命令之前打开连接。这意味着,您应该在ExecuteNonQuery行之前打开您的连接。
  • 根据它的名称,ID应该是一些数字值而不是字符。考虑更改它的类型或考虑更改它引用某些字符类型列名称的列名。

1:我知道我知道..一个w3school链接