Reputation: 199
As general question I'd like to ask what can result in an update sql command making no changes in the table without giving any error?
Now more specifically, I have an update with no errors, all variables containing correct values, there is at least one value that's different from the one in the table, the value in the WHERE clause existing in the table and no errors given. So what is possibly going wrong?
I'm working on Microsoft Visual Studio 2012 with an OleDB connection to MS Access 2010 (more precisly .accdb file) Here is the code:
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;
}
EDIT: Corrected the SET, the issue remains
UPDATE: Problem solved with old school debugging removing everything then adding a field at the time. I don't what exactly was wrong but it ended up working. In case it helps someone else, this is how the code ended up:
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";
Upvotes: 1
Views: 1241
Reputation: 45500
You have to create the command text before attempting to add parameters:
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));
Also, your update syntax is wrong, the format is:
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
Upvotes: 4
Reputation: 4943
Use ? rather than the parameter name:
cmd.CommandText = "UPDATE [Movimento Ferramentas] " +
"SET [Data saida] = ?, " +
"[Entidade] = ?, " +
"Estado = 'Calibração', " +
"[Observações1] = ?," +
"Certificado = ?, " +
"Resultado = ? " +
"WHERE Certificado = ?";
Make sure your params are added to the list in the order they're referenced in the statement. Some database providers allow the @ and some require the ?. Just depends on what you're hitting, like Adam said above.
Upvotes: 0