通过DataAdapter保存数据。
数据结构
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




