我正在尝试更新表但我一直得到异常:更新无法找到TableMapping ...
我甚至尝试过最小化代码,但我仍然没有看到问题
Items.cs
public static void WriteDescription()
{
DataSet items = DAL.GetDataSet("SELECT * FROM Items");
for (int i = 0; i < items.Tables[0].Rows.Count; i++)
items.Tables[0].Rows[i]["Description"] = "Hello";
DAL.UpdateDB("SELECT * FROM Items", items, "Items");
}
Dal.cs
static public void UpdateDB(string strSql, DataSet ds, string tablename)
{
SqlConnection connection = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand(strSql, connection);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
new SqlCommandBuilder(adapter);
adapter.Update(ds, tablename);
}
我甚至尝试删除for,可能是什么问题?
答案 0 :(得分:0)
根据代码的设计方式,您应该使用SqlCommand对象在没有SqlDataAdapter的情况下执行更新。 SqlDataAdapter使用错误,根据代码的构造方式不必要。
DataAdapter的构造
SqlDataAdapter adapter = new SqlDataAdapter的(CMD);
将命令(cmd)设置为DataAdapter的SELECT命令,而不是Update命令。 (DataAdapter具有插入,更新,删除和选择命令)
请改为尝试:
static public void UpdateDB(string strSql, DataSet ds, string tablename)
{
SqlConnection connection = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand(strSql, connection);
try
{
connection.Open();
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
// error hanlding code here
}
finally
{
connection.Close();
}
}
或者,您可以保留大部分代码并正确设置更新命令 - 添加一行
adapter.UpdateCommand = strSql;
在调用“更新”之前。