我需要将字段QB_STATUS
从值R
更改为值C
。我是在循环中这样做,因为我不能" requery"数据表可能已更改。
我已经构建了要更新的条目列表。代码没有错误并且迭代5次(根据我的idInvoices列表更正)但该字段没有更新。
for (int i = 0; i < idInvoices.Count; i++)
{
// following command will update one row as ID_Invoice is primary key.
// ID_Invoice taken from list previously built in ReadDataToNAVArray
SqlCommand cmd = new SqlCommand("UPDATE tblINVOICES SET QB_STATUS=@Status WHERE ID_INVOICE = @IDInvoice", myConnection);
cmd.Parameters.Add("@Status", "C");
cmd.Parameters.Add("@IDInvoice", idInvoices[i]);
cmd.Dispose();
}
答案 0 :(得分:3)
首先,您必须执行查询:ExecuteNonQuery
;第二 - 不要在循环中创建命令,参数等,只需赋值并执行:
// Make SQL readable
String sql =
@"UPDATE tblINVOICES
SET QB_STATUS = @Status
WHERE ID_INVOICE = @IDInvoice";
// wrap IDisposable into "using"
// do not recreate command in the loop - create it once
using (SqlCommand cmd = new SqlCommand(sql, myConnection)) {
cmd.Parameters.Add("@Status", SqlDbType.VarChar); //TODO: check types, please
cmd.Parameters.Add("@IDInvoice", SqlDbType.Decimal); //TODO: check types, please
// Assign parameters with their values and execute
for (int i = 0; i < idInvoices.Count; i++) {
cmd.Parameters["@Status"].Value = "C";
cmd.Parameters["@IDInvoice"].Value = idInvoices[i];
cmd.ExecuteNonQuery();
}
}
答案 1 :(得分:1)
您的命令中缺少 ExecuteNonQuery 。
for (int i = 0; i < idInvoices.Count; i++)
{
SqlCommand cmd = new SqlCommand("UPDATE tblINVOICES SET QB_STATUS=@Status WHERE ID_INVOICE = @IDInvoice", myConnection);
cmd.Parameters.Add("@Status", "C");
cmd.Parameters.Add("@IDInvoice", idInvoices[i]);
cmd.ExecuteNonQuery();
cmd.Dispose();
}
答案 2 :(得分:0)
我认为你错过了cmd.ExecuteNonQuery();
。
使用sql命令的不同方法的示例:
SqlConnection addConn = new SqlConnection();
addConn.ConnectionString = Properties.Settings.Default.yourDataBaseConnection;
addConn.Open();
SqlCommand addComm = new SqlCommand();
addComm.Connection = addConn;
addComm.CommandText = "sql command";
addComm.ExecuteNonQuery();