C#中SqlDataApter.update()使用經驗及技巧
来源:互联网 发布:注册会计师挂靠 知乎 编辑:程序博客网 时间:2024/05/08 20:13
我原來是用delphi7.0開發ERP系統﹐從2007年開始轉向C#2005,可是在做測試數據保存時總出現如下錯誤﹕
Update requires a valid InsertCommand when passed DataRow collection with new rows.
當時很納悶。
部分代碼如下﹕
scn.ConnectionString = GlobMsg.DbConnection;
scn.Open();
SqlCommand scmdpc_hd = new SqlCommand();
scmdpc_hd.Connection = scn;
scmdpc_hd.CommandText = "select * from pc_hd";
scmdpc_hd.CommandType = CommandType.Text;
SqlCommand scmdpc_ln = new SqlCommand();
scmdpc_ln.Connection = scn;
scmdpc_ln.CommandText = "select * from pc_ln";
scmdpc_ln.CommandType = CommandType.Text;
//SqlDataAdapter sda_PC_HD = new SqlDataAdapter("select * from pc_hd",scn );
sda_PC_HD.SelectCommand = scmdpc_hd;
sda_PC_HD.Fill(ds, "pc_hd");
//SqlDataAdapter sda_PC_LN = new SqlDataAdapter("select * from pc_ln",scn);
sda_PC_LN.SelectCommand = scmdpc_ln;
sda_PC_LN.Fill(ds, "pc_ln");
dvpc_hd = ds.Tables["pc_hd"].DefaultView ;
pc_hdDataGridView.DataSource = dvpc_hd;
dvpc_ln = ds.Tables["pc_ln"].DefaultView;
pc_lnDataGridView.DataSource = dvpc_ln;
==========================
if (ds.GetChanges() == null)
{
MessageBox.Show("is null");
return;
}
//ds.EnforceConstraints = false;
//如下紅色代碼原本調試時是沒有的。仔細閱讀c#相關資料才發現﹐只要寫上此二行代碼完全搞定﹐ok.
SqlCommandBuilder scb_pc_hd = new SqlCommandBuilder(sda_PC_HD);
SqlCommandBuilder scb_pc_ln = new SqlCommandBuilder(sda_PC_LN);
sda_PC_LN.Update(ds, "pc_ln");
// sda_PC_HD.
sda_PC_HD.Update(ds, "pc_hd");
=======================
總結﹕
1.為什么不能直接用sqlcommand,一定要加上一個sqlcommandbuilder﹐才可以保存?這個我不明白為什么。
2.在DELPHI中可以看到修改后的數據﹐也就是說我們調用delphi中clientdataset.delta時將出現成對的記錄﹐一條原數據記錄﹐一條修改后的數據記錄﹐而在c#中調用dataset.getchanges()時得到的是一條修改后的數據記錄﹐這有有區別了。(在delphi中這種方式可以知道我修改了哪個字段數據﹐或是將哪個數據置為空了﹐而在c#中因只有一條數據﹐沒辦法知道我修改了哪些字段)有沒有知道這個機理的朋友﹖有的話請在此留言并發表意見。
3.多交流。
4.多學習。
//引用此文章請注明﹕本文章原創作者﹕馮鵬飛(蘭鵬電腦軟件開發部總設計師)
- C#中SqlDataApter.update()使用經驗及技巧
- SqlBulkCopy对象和SqlDataApter的Update方法
- plsql 使用技巧 及 语句集锦(二)经典update
- plsql 使用技巧 及 语句集锦(二)经典update
- c#中JavaScript使用技巧精萃
- C#中UPDATE的用法
- update中使用replace
- C#使用DataSet之Update
- FMOD使用要点及技巧-更新中...
- 工作中linux使用及技巧
- C#使用工具及编程技巧和安全方面记录
- C#使用DataAdapter.Update(dt)方法,无法批量插入数据的原因及解决
- rails中update失败后回滚小技巧
- Hibernate中Update的使用
- update中使用select 语法
- mysql update中使用subquery
- mysql中update别名使用
- mongodb中update的使用
- CAPCOM.LOST.PLANET.TRAG.ZERO.v1.0.MULTiLANG.132x176.SiEMENS.x75.J2MEv1.RETAiL
- 什么是 Enhydra Shark 管理程序?
- shark配置文件
- 从搜索引擎开始-lucene简介
- prototype.js开发者手册
- C#中SqlDataApter.update()使用經驗及技巧
- j2ee学习感悟
- 重修:拉格朗日恒等式(初等代数)
- 子网掩码基础:什么是子网掩码
- 工作流概述
- 关于工作流介绍
- 医院信息系统中一种经济适用的数据库容灾方法 ORACLE Standby
- Windows API一日一练(17)DialogBox和DialogBoxParam函数
- bpel和工作流的三个主要区别