NpgsqlCommand ExecuteNonQuery не обновляет PostgreSQL база данных - PullRequest
0 голосов
/ 01 мая 2020

В проекте 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, указывая на то, что записи не были зафиксированы.

Я могу взять эту команду обновления и заменить параметры значениями и запустить ее для базы данных. и он обновляется нормально.

Я должен что-то упустить где-то, но я понятия не имею, что.

...