DataAdapter 更新问题

自由建客 2011-07-24 08:44:58
class DataBase {

private SQLiteDataAdapter Client_Adapter = new SQLiteDataAdapter();
private string Client_InsertCmd=@"
INSERT INTO Client_V (
City, Unit, Name,
Arrear, Disable, Note
)
VALUES (
@City, @Unit, @Name,
@Arrear, @Disable, @Note
);";


// 构造函数
public DataBase()
{
Client_Adapter.InsertCommand = new SQLiteCommand(Client_InsertCmd, Connection);

SQLiteParameter p;

p = new SQLiteParameter("@City", DbType.String);
p.SourceColumn = "City";
Client_Adapter.InsertCommand.Parameters.Add(p);
p = new SQLiteParameter("@Unit", DbType.String);
p.SourceColumn = "Unit";
Client_Adapter.InsertCommand.Parameters.Add(p);
p = new SQLiteParameter("@Name", DbType.String);
p.SourceColumn = "Name";
Client_Adapter.InsertCommand.Parameters.Add(p);
p = new SQLiteParameter("@Arrear", DbType.Int64);
p.SourceColumn = "Arrear";
Client_Adapter.InsertCommand.Parameters.Add(p);
p = new SQLiteParameter("@Disable", DbType.Boolean);
p.SourceColumn = "Disable";
Client_Adapter.InsertCommand.Parameters.Add(p);
p = new SQLiteParameter("@Note", DbType.String);
p.SourceColumn = "Note";
Client_Adapter.InsertCommand.Parameters.Add(p);
}

// 插入行,成功返回 null ,否则返回错误消息
public string Client_Insert(
string city, string unit, string name,
Int64 arrear, bool disable, string note)
{
if (city == "" || unit == "" || name == "")
return "城市、单位、姓名缺一不可!";
if (Client_GetId(city, unit, name) != -1) return "该客户早已存在!";
var row = Client_Table.NewRow();
row.BeginEdit();
row["City"] = city;
row["Unit"] = unit;
row["Name"] = name;
row["Arrear"] = arrear;
row["Disable"] = disable;
row["Note"] = note;
row.EndEdit(); // 行状态 Detached
try {
Client_Adapter.Update(new DataRow[] { row }); // 失败
} // 行状态依然 Detached
catch { return "未知错误!"; }
return null;
}
}
...全文
89 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由建客 2011-07-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gefangliang 的回复:]
错误代码是那里,报什么错误呢?
[/Quote]
具体忘了,只记得是说什么违反并发性什么什么的,我根本就是单进程独占又单线程操作的。
自由建客 2011-07-24
  • 打赏
  • 举报
回复
原因找到了,在于 SQLiteDataAdapter 不能对行数组操作,行必须加入表才行,不知 SqlDataAdapter 是否也如此。
另外 SQLiteDataAdapter 更新表后,实际数据成功反映到了数据库,但 DataRow 的行状态根本就没变,一个个都还是 Modified ,郁闷!

[Quote=引用 2 楼 fangxinggood 的回复:]
Client_Adapter.Update(new DataRow[] { row }); // 失败
改为:
Client_Table.Add(row);
Client_Adapter.Update(Client_Table);
Client_Table.AcceptChanges();

另外,你是自己写的InsertCommand何不直接用 Comma……
[/Quote]
这只是临时的,主要还是看后面的更新 DataTable 。
机器人 2011-07-24
  • 打赏
  • 举报
回复
Client_Adapter.Update(new DataRow[] { row }); // 失败
改为:
Client_Table.Add(row);
Client_Adapter.Update(Client_Table);
Client_Table.AcceptChanges();

另外,你是自己写的InsertCommand何不直接用 Command.ExecuteNonQuery()
心灵彩虹 2011-07-24
  • 打赏
  • 举报
回复
错误代码是那里,报什么错误呢?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧