当DataAdapter.Update返回1但数据库未更改时该怎么办?

时间:2011-03-23 09:56:54

标签: c# database ms-access

我想使用以下代码在msaccess表中插入一个新行。

class MachineDataTable : DataTable
{
    public MachineDataTable()
    {
        Columns.Add(new DataColumn("ID", typeof(int)));
        Columns.Add(new DataColumn("Name", typeof(string)));
        PrimaryKey = new DataColumn[] { Columns["ID"] };
    }
    ...
}

以下代码按预期工作:

da.ExecuteNonQuery(@"CREATE TABLE Machine (
            ID LONG NOT NULL,
            Name TEXT NOT NULL
        )");

使用以下命令创建DataAdapter InsertCommand:

DbCommand cmd = connection.CreateCommand();
cmd.CommandText = "Machine";
cmd.CommandType = CommandType.TableDirect;
da.InsertCommand = cmd;

然后我尝试插入一行。

MachineDataTable table = new MachineDataTable();
DataRow row = table.NewRow();
row["ID"] = 1234; 
row["Name"] = "Name";
table.Add(row);
int n = da.Update(table);
//n == 1

Update调用返回1(行更新),没有异常。 当我使用MsAccess查看数据库时,没有插入行。

2 个答案:

答案 0 :(得分:0)

您是否记得从某个地方实际调用MachineTable()table对象上的MyDataTable方法?

<击>

好像你打算让MachineTable()方法成为MyDataTable类的构造函数,而不是它。

答案 1 :(得分:0)

据我所知,TableDirect实际上是在表上发出SELECT查询,然后(在MSDN之后的“如果执行此命令返回行”注释),这些现有的行正在合并。它没有进行插入/更新。也许考虑命令构建器MSDN

(警告:我从来没有,曾经使用DataAdapter - 这完全基于我对MSDN的解释;它可能很容易出错)