更新SQL命令不会影响任何行

时间:2013-11-04 14:27:03

标签: c# sql sql-update

作为一般性问题,我想问一下什么会导致更新sql命令在表中没有任何变化而没有给出任何错误?

现在更具体地说,我有一个没有错误的更新,所有变量都包含正确的值,至少有一个值与表中的值不同,WHERE子句中的值存在于表中并且没有给出错误。那么可能出现什么问题?

我正在使用与MS Access 2010的OleDB连接的Microsoft Visual Studio 2012(更精确的.accdb文件) 这是代码:

public int updateCert(Calibracao cal, string certificadoAnterior)
 {
 OleDbConnection l = OleDbConnectionDAO.createConnection();
 int result = 0;

  try
    {   
       l.Open();

       OleDbCommand cmd = l.CreateCommand();
       cmd.Parameters.Add(new OleDbParameter("@data", cal.Data));
       cmd.Parameters.Add(new OleDbParameter("@entidade", cal.EntidadeCal));
       cmd.Parameters.Add(new OleDbParameter("@observacao", cal.Observacao));
       cmd.Parameters.Add(new OleDbParameter("@certificado", cal.Certificado));
       cmd.Parameters.Add(new OleDbParameter("@resultado", cal.Resultado));
       cmd.Parameters.Add(new OleDbParameter("@selecionar", cal.Selecionar));
       cmd.Parameters.Add(new OleDbParameter("@certificadoAnterior", certificadoAnterior));

       cmd.CommandText = "UPDATE [Movimento Ferramentas] SET " +
                 "[Data saida] = @data, " +
        "[Entidade] = @entidade, " +
        "Estado = 'Calibração', " +
        "[Observações1] = @observacao," +
        "Certificado = @certificado, " +
        "Resultado = @resultado " +
        "WHERE Certificado = @certificadoAnterior";

        result = cmd.ExecuteNonQuery();
        l.Close();
    }
     catch (Exception ex)
        {
            l.Close();
            System.Diagnostics.Debug.WriteLine("DAO Exception: " + ex.Message);
            return result;
        }
        return result;

}

编辑:更正了SET,问题仍然存在

更新:问题解决了旧学校调试删除所有内容然后添加一个字段。我不知道究竟是什么错,但它最终工作了。如果它帮助了其他人,这就是代码的结果:

cmd.Parameters.Add(new OleDbParameter("@entidade", cal.EntidadeCal));
cmd.Parameters.Add(new OleDbParameter("@data", cal.Data));
cmd.Parameters.Add(new OleDbParameter("@certificado", cal.Certificado));
cmd.Parameters.Add(new OleDbParameter("@resultado", cal.Resultado));
cmd.Parameters.Add(new OleDbParameter("@observacao", cal.Observacao));
cmd.Parameters.Add(new OleDbParameter("@certificadoAnterior", certificadoAnterior));

cmd.CommandText = "UPDATE [Movimento Ferramentas] SET " +
            "[Entidade] = @entidade, " +
            "[Data saida] = @data, " +
            "Certificado = @certificado, " +
            "Resultado = @resultado, " +
            "[Observações1] = @observacao " +
            "WHERE Certificado = @certificadoAnterior";

2 个答案:

答案 0 :(得分:4)

您必须在尝试添加参数之前创建命令文本:

cmd.CommandText = "UPDATE [Movimento Ferramentas] " +
                 "SET [Data saida] = @data, " +
                     "[Entidade] = @entidade, " +
                     "Estado = 'Calibração', " +
                     "[Observações1] = @observacao," +
                     "Certificado = @certificado, " +
                     "Resultado = @resultado " +
                     "WHERE Certificado = @certificadoAnterior";


cmd.Parameters.Add(new OleDbParameter("@data", cal.Data));
cmd.Parameters.Add(new OleDbParameter("@entidade", cal.EntidadeCal));
cmd.Parameters.Add(new OleDbParameter("@observacao", cal.Observacao));
cmd.Parameters.Add(new OleDbParameter("@certificado", cal.Certificado));
cmd.Parameters.Add(new OleDbParameter("@resultado", cal.Resultado));
cmd.Parameters.Add(new OleDbParameter("@selecionar", cal.Selecionar));
cmd.Parameters.Add(new OleDbParameter("@certificadoAnterior", certificadoAnterior));

此外,您的更新语法错误,格式为:

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

答案 1 :(得分:0)

使用?而不是参数名称:

cmd.CommandText = "UPDATE [Movimento Ferramentas] " +
                 "SET [Data saida] = ?, " +
        "[Entidade] = ?, " +
        "Estado = 'Calibração', " +
        "[Observações1] = ?," +
        "Certificado = ?, " +
        "Resultado = ? " +
        "WHERE Certificado = ?";

确保您的参数按照语句中引用的顺序添加到列表中。有些数据库提供商允许使用@,而有些则需要?。正如亚当所说的那样,只取决于你所打的是什么。