向DataTable添加行时没有错误,但该行未添加到数据库中

时间:2014-03-03 16:22:17

标签: c# datatable ado.net dataset dataadapter

我正在尝试使用ODBC向PostgreSQL数据库中的表添加一行。虽然没有抛出异常,但该行未添加到表中。这是我的代码:

    void TestNewRow()
    {
        try
        {
            DataSet dataSet = new DataSet();
            OdbcDataAdapter adapter = new OdbcDataAdapter();
            adapter.SelectCommand =
                new OdbcCommand("select read_time from plant_genie.plc_values_by_tag", m_db.GetConnection());
            OdbcCommandBuilder builder =
                new OdbcCommandBuilder(adapter);

            adapter.Fill(dataSet);

            DataTable valuesTable = dataSet.Tables[0];
            DataRow newRow = valuesTable.NewRow();
            newRow["read_time"] = DateTime.Now;
            valuesTable.Rows.Add(newRow);
            valuesTable.AcceptChanges();
            dataSet.AcceptChanges();
            adapter.Update(dataSet);
        }
        catch (Exception ex)
        {
            int a = 1;
        }
    }

我在异常处理程序中有一个断点,在函数末尾有另一个断点。第二个断点被击中但不是第一个断点,因此不会抛出任何异常。我已经三重检查我正在连接到正确的数据库。我认为我不应该需要两个AcceptChanges()调用和一个Update()调用,但即使有了所有这些过度杀戮,我仍然没有在我的表中获得新行。我做错了什么?

我试图找到这个问题的副本,但是有很多关于添加行的问题,如果有重复的话,它就会被隐藏。

感谢您的帮助。

ROBR

1 个答案:

答案 0 :(得分:2)

调用AcceptChanges会将所有更改标记为已接受(即它将所有内容的状态重置为Unmodified),因此不会将更改保存到数据库中。删除对表和数据集的调用,应保存更改。