【问题标题】:I get no errors when adding a row to a DataTable, but the row is not added to the database将行添加到 DataTable 时没有错误,但未将行添加到数据库
【发布时间】:2014-04-04 19:14:18
【问题描述】:

我正在尝试使用 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() 调用,但即使使用了所有这些矫枉过正,我仍然没有在我的表中获得新行。我做错了什么?

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

感谢您的帮助。

罗伯R

【问题讨论】:

    标签: c# datatable ado.net dataset dataadapter


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的帮助!虽然我已经足够远地将您的回复标记为答案,但我仍然遇到麻烦,希望能得到帮助。现在我从 PostgreSQL 得到一个例外。 PostgeSQL 日志包含以下内容:2014-03-03 11:39:35 EST 错误:未实现跨数据库引用:字符 13 处的“bokaro_five_charges.plant_genie.plc_values_by_tag” 2014-03-03 11:39:35 EST 声明: INSERT INTO Bokaro_five_charges.plant_genie.plc_values_by_tag (read_time) VALUES ('2014-03-03 11:39:35.483'::timestamp) 数据库名称正确。有没有办法将其排除在插入查询之外?
    • @ROBERTRICHARDSON:您可以在OdbcDataAdapter 上编写自己的插入、更新和删除命令。你现在得到的东西是自动生成的。相关属性为InsertCommandUpdateCommandDeleteCommand。只需摆脱OdbcCommandBuilder,然后创建自己的命令并填充这些属性(或任何合适的属性)。在每一个上,您都需要创建一个参数对象并指定数据中应该查看的列以获取其值。
    猜你喜欢
    • 2014-12-26
    • 1970-01-01
    • 2015-02-28
    • 2013-09-21
    • 1970-01-01
    • 2016-03-09
    • 2016-11-04
    • 1970-01-01
    • 2017-03-05
    相关资源
    最近更新 更多