| (@username, @password)'''';
// 新增参数,用来表示要更新或定位的值
cmdInsert.DataParameters.Add(TDataCommandParameter.Create(''''@username'''', ''''username'''', ftString));
cmdInsert.DataParameters.Add(TDataCommandParameter.Create(''''@password'''', ''''password'''', ftString));
cmdDelete := TDataCommand.Create(nil);
cmdDelete.Connection := conn;
cmdDelete.CommandText := ''''delete from userdb where username=@username'''';
cmdDelete.DataParameters.Add(TDataCommandParameter.Create(''''@username'''', ''''username'''', ftString));
cmdUpdate := TDataCommand.Create(nil);
cmdUpdate.Connection := conn;
cmdUpdate.CommandText := ''''update userdb set password=@password where username=@username'''';
cmdUpdate.DataParameters.Add(TDataCommandParameter.Create(''''@password'''', ''''password'''', ftString));
cmdUpdate.DataParameters.Add(TDataCommandParameter.Create(''''@username'''', ''''username'''', ftString, ptWhereField));
// 定义一个数据适配器,初始化其Command属性
ada := TDataAdapter.Create();
ada.SelectCommand := cmdSelect;
ada.InsertCommand := cmdInsert;
ada.UpdateCommand := cmdUpdate;
ada.DeleteCommand := cmdDelete;
// 定义一个数据集
ds := TDataSetPlus.Create();
conn.Open();
// 用适配器填充记录集,自动新增一个叫’UserTable’的数据表放入记录集中
ada.Fill(ds, ''''UserTable'''');
// 示范更改记录集中的数据
for i := 0 to ds.Tables.ItemByName[''''UserTable''''].Rows.Count-1 do
begin
ds.Tables.ItemByName[''''UserTable''''].Rows[i].Columns.ItemByFieldName[''''password''''].Value := ''''12345'''';
end;
// 用适配器把记录集中的更改更新回数据库
ada.Update(ds.Tables[0]);
conn.Close();
FreeAndNil(conn);
FreeAndNil(ada);
FreeAndNil(ds);
FreeAndNil(cmdSelect);
FreeAndNil(cmdInsert);
FreeAndNil(cmdUpdate);
FreeAndNil(cmdDelete);
end;
大家可以看到,存在很多缺陷,还有隐藏的Bug(我基本上没有做找Bug的动作),我只是把心里想的先试验一下,实现出来,如果有时间,再进行DeBug和完善。
已经想到要完善的:
1、实现CommandBuilder,如果只是对单个物理表做操作,可以根据SelectCommand自动生成InsertCommand、UpdateCommand和DeleteCommand。这是Ado.Net的方式,在很多场合下,可以节省大量的代码和时间。
2、更多的数据绑定。如,可以把指定的数据表中的一列的数据绑定到一个ComboBox。
3、……
整个源码可以在http://www.86soft.com/clsoft/kaneboy/adoplus.zip下载。
有什么想法,请Email联系,kaneboy@163.net,Thanks For 意见和批评。
上一页 [1] [2] |