我写了这个函数来更新一行(我将信息存储在T类中):
public void Update(T model)
{
if (!Exist(model))
{
throw new Exception("Object Not Found");
}
DataRow row = Convert(model);
row.Table.Rows.Add(row);
row.AcceptChanges();
row.SetModified();
_dataAdapter.Update(new[] { row });
}
(DataRow分离)
SqlDataAdapter配置如下:
SqlDataAdapter da = new SqlDataAdapter("Select * From " + tableName,
ConnectedDAL.GetConnection());
SqlCommandBuilder builder = new SqlCommandBuilder(da);
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
由于某种原因,我的插入和删除工作,但更新没有。 对Update()的调用完成没有错误,但数据库没有收到更新。
帮助?
更新
命令构建器中的更新命令文本很奇怪:
对于城市(CityID,CityName,CountryID)
"更新[城市]设置[CityName] = @ p1,[CountryID] = @ p2 WHERE(([CityID] = @ p3 AND([CityName] = @ p4)AND([CountryID] = @ P5))
第一个条件是有道理的,但其余条件不合适。此外,该调用返回1,这意味着它认为它进行了更改。
答案 0 :(得分:0)
我有办法让它发挥作用。
public void Update(T model)
{
if (!Exist(model))
{
throw new Exception("Object Not Found");
}
DataRow tmp = GetRow(model);
_dataAdapter.Update(new []{ tmp });
}
private DataRow GetRow(T model)
{
DataRow row = Convert(model);
var schem = Schema;
string[] keys = new string[schem.PrimaryKey.Length];
for (var i = 0; i < schem.PrimaryKey.Length; i++)
{
DataColumn column = schem.PrimaryKey[i];
keys[i] = row[column.ColumnName].ToString();
}
DataRow dr = Convert(Select(keys));
dr.Table.Rows.Add(dr);
dr.AcceptChanges();
for (var i = 0; i < row.ItemArray.Length; i++)
{
if (!schem.Columns[i].AutoIncrement)
{
dr[i] = row.ItemArray[i];
}
}
return dr;
}
这很有效。