DataAdapter的Update问题(解决新开贴给分)

abblly 2007-08-15 09:21:19
我给OracleDataAdapter指定了SelectCommand,InsertCommand,UpdateCommand和DeleteCommand,当调用Update(someDataTable)的时候,DeleteCommand根本就没有执行,而InsertCommand和UpdateCommand都是正确的,为什么?代码如下:
private OracleDataAdapter CreateOralceDataAdapter()
{
OracleDataAdapter da = new System.Data.OracleClient.OracleDataAdapter();
OracleParameter TempParemeter= new OracleParameter();
// string SelectSql = "SELECT equipcode as 设备编号,equipname as 设备名称,neobjkey as 厂家设备编号 ,nename as 厂家设备名称 FROM dt_equipnemap";
string SelectSql = "SELECT equipcode,equipname ,neobjkey ,nename FROM dt_equipnemap";
OracleCommand SelectCMD= new OracleCommand(SelectSql,this._Ora.Connnection);
da.SelectCommand = SelectCMD;

string InsertSql = "INSERT INTO dt_equipnemap (equipcode,equipname,neobjkey,nename) VALUES (:equipcode,:equipname,:neobjkey,:nename)";
OracleCommand InsertCMD = new OracleCommand(InsertSql,this._Ora.Connnection);
InsertCMD.Parameters.Add("equipcode",OracleType.VarChar,20,"equipcode");
InsertCMD.Parameters.Add("equipname",OracleType.VarChar,40,"equipname");
InsertCMD.Parameters.Add("neobjkey",OracleType.VarChar,150,"neobjkey");
InsertCMD.Parameters.Add("nename",OracleType.VarChar,150,"nename");
da.InsertCommand = InsertCMD;

string UpdateSql = "UPDATE dt_equipnemap SET equipcode = :equipcode,equipname=:equipname,neobjkey=:neobjkey,nename=:nename " +
" WHERE equipcode = :oldequipcode AND neobjkey = :oldneobjkey";
OracleCommand UpdateCMD = new OracleCommand(UpdateSql,this._Ora.Connnection);
UpdateCMD.Parameters.Add("equipcode",OracleType.VarChar,20,"equipcode");
UpdateCMD.Parameters.Add("equipname",OracleType.VarChar,40,"equipname");
UpdateCMD.Parameters.Add("neobjkey",OracleType.VarChar,150,"neobjkey");
UpdateCMD.Parameters.Add("nename",OracleType.VarChar,150,"nename");
// UpdateCMD.Parameters.Add("oldequipcode",OracleType.VarChar,20,"equipcode");
// UpdateCMD.Parameters.Add("oldneobjkey",OracleType.VarChar,150,"neobjkey");
TempParemeter = UpdateCMD.Parameters.Add("oldequipcode",OracleType.VarChar,20,"equipcode");
TempParemeter.SourceVersion = DataRowVersion.Original;
TempParemeter = UpdateCMD.Parameters.Add("oldneobjkey",OracleType.VarChar,150,"neobjkey");
TempParemeter.SourceVersion = DataRowVersion.Original;
da.UpdateCommand = UpdateCMD;

string DeleteSql = "DELETE FROM dt_equipnemap WHERE equipcode=:equipcode AND neobjkey=:neobjkey AND equipname=:equipname AND nename=:nename";
OracleCommand DeleteCMD = new OracleCommand(DeleteSql,this._Ora.Connnection);
TempParemeter = DeleteCMD.Parameters.Add("equipcode",OracleType.VarChar,20,"equipcode");
TempParemeter.SourceVersion = DataRowVersion.Original;
TempParemeter = DeleteCMD.Parameters.Add("equipname",OracleType.VarChar,40,"equipname");
TempParemeter.SourceVersion = DataRowVersion.Original;
TempParemeter = DeleteCMD.Parameters.Add("neobjkey",OracleType.VarChar,150,"neobjkey");
TempParemeter.SourceVersion = DataRowVersion.Original;
TempParemeter = DeleteCMD.Parameters.Add("nename",OracleType.VarChar,150,"nename");
TempParemeter.SourceVersion = DataRowVersion.Original;
da.DeleteCommand = DeleteCMD;

return da;

}
...全文
230 点赞 收藏 9
写回复
9 条回复
abblly 2007年08月15日
楼上的没设置主键吧? update必须设置主键的.
---------------------
是在程序里面设置还是设计数据库的时候设置?设计数据库的时候,我已经设置主键了
回复 点赞
ZiRRen 2007年08月15日
楼上的没设置主键吧? update必须设置主键的.
回复 点赞
abblly 2007年08月15日
http://blog.csdn.net/ifan_net/archive/2006/11/10/1378466.aspx
按照这个说法也做了,还是不行,网上搜索了一下,不少人说ms的这个update方法搞的不靠谱。我打算不用Update了,自己手工实现Update,没想到ms搞的东东也有这么不好用的,ft
回复 点赞
abblly 2007年08月15日
是否需要加个OracleCommanderBuider ocb=new OracleCommanderBuider(da);呢?
----------------
加了,也不行,msdn上说这句是为了自动生成DeleteCommand用的,而我自己已经指定了DeleteCommand
回复 点赞
xwk789xwk 2007年08月15日
路过,帮顶一下
回复 点赞
ruan_hg 2007年08月15日
是否需要加个OracleCommanderBuider ocb=new OracleCommanderBuider(da);呢?
回复 点赞
abblly 2007年08月15日
试试把DeleteCommand的参数改成:

TempParemeter.SourceVersion = DataRowVersion.Original;
改成
TempParemeter.SourceVersion = DataRowVersion.Current;
-----------------------
还是不行啊,好像根本就没走DeleteCommand的语句,我把语句改为非法的sql语句也不出异常
比如把上面的
string DeleteSql = "DELETE FROM dt_equipnemap WHERE equipcode=:equipcode AND neobjkey=:neobjkey AND equipname=:equipname AND nename=:nename";
改成
string DeleteSql = "why dt_equipnemap WHERE equipcode=:equipcode AND neobjkey=:neobjkey AND equipname=:equipname AND nename=:nename";
也不出异常,但是如果把UpdateCommand 的语句修改成非法语句的话,就会有异常抛出。
回复 点赞
BearRui 2007年08月15日
试试把DeleteCommand的参数改成:

TempParemeter.SourceVersion = DataRowVersion.Original;
改成
TempParemeter.SourceVersion = DataRowVersion.Current;
回复 点赞
abblly 2007年08月15日
其余部分的代码是这样的:
this.dtDataSource.Clear();
OracleDataAdapter da = this.CreateOralceDataAdapter();
da.Fill(this.dtDataSource);
//这里把this.dtDataSource Remove了一行
da.Update(this.dtDataSource);//发现数据库里面根本就没有删除刚才dtDataSource 里面的行
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告