В проекте C# WinForms я заполняю DataGridView из базы данных PostgreSQL, поэтому я использую инфраструктуру Npg Sql.
Я могу успешно вставлять и удалять записи в DGV просто отлично, но я не могу понять, почему обновления не работают.
Вот код, который вызывается при нажатии кнопки Сохранить изменения:
private bool UpdateChangedCatsRecords()
{
bool bUpdateSuccessful;
try
{
DataTable dtChanges = new DataTable();
dtChanges = dtCategories.GetChanges();
if (dtChanges == null) return false;
int intRowIndex;
string strCompany = cboSelectCompany.Text;
List<string> lsCategoryParams = new List<string>();
for (intRowIndex = 0; intRowIndex <= dtChanges.Rows.Count - 1; intRowIndex++)
{
DataRow drCurrRow = dtChanges.Rows[intRowIndex];
int intRecordId = (int)drCurrRow[0];
string strCategory = drCurrRow.ItemArray[1].ToString();
// new value is row item array 5
// new desc is row item array 6
// ref 1 is row item array 7
// ref 2 is row item array 8
lsCategoryParams.Add(drCurrRow.ItemArray[5].ToString());
lsCategoryParams.Add(drCurrRow.ItemArray[6].ToString());
lsCategoryParams.Add(drCurrRow.ItemArray[7].ToString());
lsCategoryParams.Add(drCurrRow.ItemArray[8].ToString());
db dbUpdateCatRec = new db();
bUpdateSuccessful = dbUpdateCatRec.UpdateDbRecord("xref", strCompany, intRecordId, strCategory, lsCategoryParams);
}
bUpdateSuccessful = true;
}
catch (Exception ex)
{
LogMessage(ex, "Error Saving Changes to Categories DGV");
bUpdateSuccessful = false;
}
return bUpdateSuccessful;
}
Вот UpdateDbRecord
метод, который вызывает выше:
public bool UpdateDbRecord(string strDbTable, string strCompany, int intRecId, string strCategory, List<string> lsUpdateParams)
{
bool bRecordUpdated = false;
string strUpdateCmd = "";
int intUpdatedId = -1;
try
{
using (NpgsqlConnection conn = new NpgsqlConnection(Global.glbConnectionString))
using (NpgsqlCommand cmd = new NpgsqlCommand(strUpdateCmd, conn))
{
conn.Open();
strUpdateCmd = "UPDATE masterfiles.xref" +
" SET" +
" new_value = @newValue," +
" new_desc = @newDesc," +
" reference1 = @ref1," +
" reference2 = @ref2" +
" WHERE id = @recId";
cmd.Parameters.AddWithValue("@newValue", lsUpdateParams[0]);
cmd.Parameters.AddWithValue("@newDesc", lsUpdateParams[1]);
cmd.Parameters.AddWithValue("@ref1", lsUpdateParams[2]);
cmd.Parameters.AddWithValue("@ref2", lsUpdateParams[3]);
cmd.Parameters.AddWithValue("@recId", intRecId);
intUpdatedId = cmd.ExecuteNonQuery();
}
if (intUpdatedId != -1) bRecordUpdated = true;
}
catch (Exception ex)
{
LogMessage(ex, "Error");
}
return bRecordUpdated;
}
Шагая по коду во время выполнения, все выглядит хорошо. Все параметры верны в точке ExecuteNonQuery()
. ExecuteNonQuery()
выполняется, но ошибки нет, и intUpdatedId
всегда возвращается как -1, указывая на то, что записи не были зафиксированы.
Я могу взять эту команду обновления и заменить параметры значениями и запустить ее для базы данных. и он обновляется нормально.
Я должен что-то упустить где-то, но я понятия не имею, что.