CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

通过DataAdapter保存数据。

楼主hel(抵制日货,从我做起)2005-01-20 17:51:37 在 .NET技术 / C# 提问

数据结构  
  CREATE   TABLE   EXAM_CHARGE_LIST  
  (  
  EXAM_SEQ DECIMAL(16,   0)   NOT   NULL,  
  EXAM_ITEM NVARCHAR(8)   NOT   NULL,  
  PRICE_ITEM_CODE NVARCHAR(8)   NOT   NULL,  
  PRICE_ITEM_NAME NVARCHAR(30),  
  STANDARD_PRICE DECIMAL(18,   4),  
  ITEM_AMOUNT DECIMAL(4,   0),  
  ITEM_COST DECIMAL(18,   4),   --此项目总价格  
  ITEM_CHARGE DECIMAL(18,   4),   --此项目总费用  
  PRIMARY   KEY(EXAM_SEQ,   EXAM_ITEM,   PRICE_ITEM_CODE)  
  );  
   
  程序代码:  
  private   SqlDataAdapter   CreateExamChargeListAdapter()  
  {  
  MpmDataAdapter   adapter   =   new   SqlDataAdapter(  
  "SELECT   *   FROM   EXAM_CHARGE_LIST   WHERE   EXAM_SEQ=@EXAM_SEQ",  
  this.dbConnection);  
  adapter.SelectCommand.Parameters.Add(  
  new   MpmParameter("@EXAM_SEQ",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   16,   0,   "@EXAM_SEQ",   DataRowVersion.Current,   -1));  
  adapter.SelectCommand.Prepare();  
  adapter.SelectCommand.Parameters[0].Value   =   -1m;   //数据库中没有为-1的值  
  adapter.Fill(dataSet,   "EXAM_CHARGE_LIST");  
   
   
  insert.CommandText   =   "INSERT   INTO   EXAM_CHARGE_LIST(EXAM_SEQ,EXAM_ITEM,PRICE_ITEM_CODE,PRICE_ITEM_NAME,STANDARD_PRICE,ITEM_AMOUNT,ITEM_COST,ITEM_CHARGE)   VALUES"   +  
  "(@EXAM_SEQ,@EXAM_ITEM,@PRICE_ITEM_CODE,@PRICE_ITEM_NAME,@STANDARD_PRICE,@ITEM_AMOUNT,@ITEM_COST,@ITEM_CHARGE)";  
  insert.Parameters.Add(new   MpmParameter("@EXAM_SEQ",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   16,   0,   "EXAM_SEQ",   DataRowVersion.Current,   -1));  
  insert.Parameters.Add("@EXAM_ITEM",   MpmType.NVarChar,   8,   "EXAM_ITEM");  
  insert.Parameters.Add("@PRICE_ITEM_CODE",   MpmType.NVarChar,   8,   "PRICE_ITEM_CODE");  
  insert.Parameters.Add("@PRICE_ITEM_NAME",   MpmType.NVarChar,   30,   "PRICE_ITEM_NAME");  
  insert.Parameters.Add(new   MpmParameter("@STANDARD_PRICE",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   16,   4,   "STANDARD_PRICE",   DataRowVersion.Current,   -1));  
  insert.Parameters.Add(new   MpmParameter("@ITEM_AMOUNT",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   4,   0,   "ITEM_AMOUNT",   DataRowVersion.Current,   -1));  
  insert.Parameters.Add(new   MpmParameter("@ITEM_COST",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   16,   4,   "ITEM_COST",   DataRowVersion.Current,   -1));  
  insert.Parameters.Add(new   MpmParameter("@ITEM_CHARGE",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   16,   4,   "ITEM_CHARGE",   DataRowVersion.Current,   -1));  
  adapter.InsertCommand   =   insert;  
   
  MpmCommand   update   =   MainApp.DBConnection.CreateCommand();  
  update.CommandText   =   "UPDATE   EXAM_CHARGE_LIST   SET   EXAM_ITEM=@EXAM_ITEM,"+  
  "PRICE_ITEM_CODE=@PRICE_ITEM_CODE,PRICE_ITEM_NAME=@PRICE_ITEM_NAME,STANDARD_PRICE=@STANDARD_PRICE,"+  
  "ITEM_AMOUNT=@ITEM_AMOUNT,ITEM_COST=@ITEM_COST,ITEM_CHARGE=@ITEM_CHARGE   WHERE   EXAM_SEQ=@OLD_EXAM_SEQ"   +  
  "   AND   EXAM_ITEM=@OLD_EXAM_ITEM   AND   PRICE_ITEM_CODE=@OLD_PRICE_ITEM_CODE";  
  update.Parameters.Add(new   MpmParameter("@EXAM_ITEM",   MpmType.NVarChar,   8,   "EXAM_ITEM"));  
  update.Parameters.Add(new   MpmParameter("@PRICE_ITEM_CODE",   MpmType.NVarChar,   8,   "PRICE_ITEM_CODE"));  
  update.Parameters.Add(new   MpmParameter("@PRICE_ITEM_NAME",   MpmType.NVarChar,   30,   "PRICE_ITEM_NAME"));  
  update.Parameters.Add(new   MpmParameter("@STANDARD_PRICE",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   16,   4,   "STANDARD_PRICE",   DataRowVersion.Current,   -1));  
  update.Parameters.Add(new   MpmParameter("@ITEM_AMOUNT",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   4,   0,   "ITEM_AMOUNT",   DataRowVersion.Current,   -1));  
  update.Parameters.Add(new   MpmParameter("@ITEM_COST",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   16,   4,   "ITEM_COST",   DataRowVersion.Current,   -1));  
  update.Parameters.Add(new   MpmParameter("@ITEM_CHARGE",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   16,   4,   "ITEM_CHARGE",   DataRowVersion.Current,   -1));  
  update.Parameters.Add(new   MpmParameter("@OLD_EXAM_SEQ",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   16,   0,   "EXAM_SEQ",   DataRowVersion.Original,   -1));  
  update.Parameters.Add("@OLD_EXAM_ITEM",   MpmType.NVarChar,   8,   "EXAM_ITEM").SourceVersion   =   DataRowVersion.Original;;  
  update.Parameters.Add("@OLD_PRICE_ITEM_CODE",   MpmType.NVarChar,   8,   "PRICE_ITEM_CODE").SourceVersion   =   DataRowVersion.Original;  
  adapter.UpdateCommand   =   update;  
   
  SqlCommand   delete   =   MainApp.DBConnection.CreateCommand();  
  delete.CommandText   =   "DELETE   FROM   EXAM_CHARGE_LIST   WHERE   EXAM_SEQ=@OLD_EXAM_SEQ   AND   EXAM_ITEM=@OLD_EXAM_ITEM   AND   PRICE_ITEM_CODE=@OLD_PRICE_ITEM_CODE";  
  delete.Parameters.Add(new   MpmParameter("@OLD_EXAM_SEQ",   MpmType.Decimal,   0,   ParameterDirection.Input,   false,   16,   0,   "EXAM_SEQ",   DataRowVersion.Original,   -1));  
  delete.Parameters.Add("@OLD_EXAM_ITEM",   MpmType.NVarChar,   8,   "EXAM_ITEM").SourceVersion   =   DataRowVersion.Original;;  
  delete.Parameters.Add("@OLD_PRICE_ITEM_CODE",   MpmType.NVarChar,   8,   "PRICE_ITEM_CODE").SourceVersion   =   DataRowVersion.Original;  
  adapter.DeleteCommand   =   delete;  
   
  return   adapter;  
  }  
   
   
  public   void   Save(Transaction   tx)  
  {  
  examChargeListAdapter.InsertCommand.Transaction   =   tx;  
  examChargeListAdapter.DeleteCommand.Transaction   =   tx;  
  examChargeListAdapter.UpdateCommand.Transaction   =   tx;  
  examChargeListAdapter.Update(dataSet.Tables["EXAM_CHARGE_LIST"]);  
  }  
   
  天呀,每次执行到Update的时候就会出现"未将对象引用设置到对象的实例"的异常。  
  数据保证都填写进去了,而且没有重复值。  
  都调试半天了调试不出来,神呀,救救我吧。  
   
   
  问题点数:100、回复次数:2Top

1 楼jun_01(无名小卒)回复于 2005-01-20 18:14:02 得分 100

"未将对象引用设置到对象的实例"和数据库没有关系,是某个对象没有new()的结果.  
  我怀疑你的问题出在这里:  
    MpmCommand   update   =   MainApp.DBConnection.CreateCommand();Top

2 楼hel(抵制日货,从我做起)回复于 2005-01-20 18:28:14 得分 0

谢谢你的回答,我刚刚找到问题所在,原来是这样:  
  加了如下语句就会出错:  
  dataSet.Tables["EXAM_CHARGE_LIST"].RowChanged   +=   rowChangedHandler;  
  dataSet.Tables["EXAM_CHARGE_LIST"].RowDeleted   +=   rowDeletedHandler;  
  还不清楚为什么.  
   
  Top

相关问题

  • 数据保存
  • 三层数据库:怎样通过clientdataset保存图像数据?
  • 请教:不通过数据库保存数据的问题。
  • ADOQuery数据保存
  • 怎么通过电脑拨打电话并保存数据呢?
  • 通过数据库生成树然后写成xml保存
  • 通过"新建数据窗口"->"grid"->"external"方式建立的数据窗口如何保存数据?
  • 怎样把数据通过XML保存到数据库中,注意数据库不支持XML。
  • 数据保存不成功
  • 数据保存问题

关键词

  • null
  • exam
  • charge
  • seq
  • adapter
  • selectcommand
  • 对象
  • item
  • dataset
  • 没有

得分解答快速导航

  • 帖主:hel
  • jun_01

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo