C# DataAdapter.Update返回1但数据库未更改时该怎么办?
我想使用以下代码在msaccess表中插入一个新行C# DataAdapter.Update返回1但数据库未更改时该怎么办?,c#,database,ms-access,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 DataColum
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查看数据库时,没有插入任何行。您是否记得从某处实际调用类型为MyDataTable
的table
对象上的MachineTable()
方法
似乎您打算让
MachineTable()
方法成为MyDataTable
类的构造函数,但它不是。据我所知,TableDirect
实质上是对表发出SELECT
查询,然后(在“如果执行此命令返回行”之后)中的注释),正在合并这些现有行。它没有执行插入/更新。也许考虑一个命令生成器?< /P>
(注意:我从来没有使用过DataAdapter-这纯粹是基于我对MSDN的解释;它很可能是错误的)是否有可能涉及某些事务被回滚?在
机器
表中是否有任何行?@Simen否,表在前后都是空的。@Marc,据我所知,我尚未启动任何事务。@phq:您可以使用MSAccess客户端在表中插入行。很抱歉,我的部分造成了混淆,我已将所有代码更改为计算机,以使代码一致。MachineTable()应该是我的示例中的构造函数。