作为一般性问题,我想问一下什么会导致更新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";
答案 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 = ?";
确保您的参数按照语句中引用的顺序添加到列表中。有些数据库提供商允许使用@,而有些则需要?。正如亚当所说的那样,只取决于你所打的是什么。