Ari*_*ari 5 c# sql-server ado.net dataadapter
此代码段引发错误:
更新无法在adapter.Update(ds)上找到TableMapping ['Table']或DataTable'Table'.); 线
为什么会抛出这种错误?
SqlConnection con = new SqlConnection();
con.ConnectionString = connectionString();
DataSet ds = new DataSet();
string strQuery = "SELECT * FROM Cars";
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(strQuery, con);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.Fill(ds, "Cars");
//Code to modify data in the DataSet
ds.Tables["Cars"].Rows[0]["Brand"] = "NewBrand";
adapter.UpdateCommand = builder.GetUpdateCommand();
adapter.Update(ds);
Run Code Online (Sandbox Code Playgroud)
使用
adapter.Update(ds, "Cars");
Run Code Online (Sandbox Code Playgroud)
代替.
我测试了它.没有相同的错误,如果我指定了表名,它就有效.但是,我必须承认,我还不知道为什么DataAdapter需要知道表名,因为它具有所需的所有信息.如果我使用ds.GetChanges我得到一行正确的表名.
更新我在MSDN上找不到任何内容,但最终在源代码中找到它(ILSpy).这是执行DBDataAdapter.Update(DataSet):
public override int Update(DataSet dataSet)
{
return this.Update(dataSet, "Table");
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您没有指定表,"Table"则使用表名,如果您指定了除此之外的表名,您将收到此错误,这真的很奇怪!
我假设这样做的原因是DataAdapter无法调用GetChanges以确定要更新的表有两个原因:
RowState!=的行UnchangedDataAdapter.因此DataAdapter.Update(DataSet)假设默认名称"Table"为table-name.编辑:但是,也许有人可以解释我为什么DataAdapter不使用DataSet.Tables[0].TableName.
因此,一般来说,最佳做法是指定要更新的表的名称.
| 归档时间: |
|
| 查看次数: |
7168 次 |
| 最近记录: |