读书人

100分C#中SqlDataApter.update()使用

发布时间: 2012-02-10 21:27:42 作者: rapoo

100分C#中SqlDataApter.update()使用及技巧 ,C#新手之高手指之
*******************************************************************
更多容去我的blog:
http://blog.csdn.net/lanpeng/archive/2007/07/27/1710824.aspx
******************************************************************
C#新手之高手指之
我原是用delphi7.0ERP系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#新手之高手指之
2007-08-01分

[解决办法]
一般不用这个方法更新
[解决办法]
人是VS蛭SQL句是一查句所以不能update.而重新例化一SqlCommandBuilder象有了
[解决办法]
我是新手~~
---------
1.因为是ms规定这样用的~~

[解决办法]
1、SqlCommandBuilder只有在用DataAdpater读取的表中含有主关键字时才会自动生成InsertCommand, UpdateCommand, DeleteCommand, (没有主关键字信息无法确定唯一行)。
你也可以自定义InsertCommand, UpdateCommand, DeleteCommand的。

2、.net也是保留已修改和原数据两份拷贝的,具体看看DataRowView.RowState, DataRow.RowState(具体什么属性忘了)。
[解决办法]
1、什么不能直接用sqlcommand,一定要加上一sqlcommandbuilder才可以保存?我不明白什么。
-----------------
可以直接用sqlcommand的啊,不过要自己写更新、添加SQL语句,而用sqlcommandbuilder是自动生成了这些SQL语句。
[解决办法]
繁体,台湾同胞??
呵呵,顶了在看.
[解决办法]
2、NET也会保存原来的值,可以这样取原来的值
ds.Tables[0].Rows[0][ "name ",DataRowVersion.Original]
DataRowVersion枚举有几个值,Original代表取原来的值。

注:如果调用了ds.AcceptChanges()方法,则DS就会清空所有DataRowVersion.Original的值


[解决办法]
1、什么不能直接用sqlcommand,一定要加上一sqlcommandbuilder才可以保存?我不明白什么。
-----------------
sqlcommandbuilder可以生成update 语句 所以要

但一般情况下可以不用这样,你可以自己拼凑SQL语句

2
建议你把DATASET作为只读的,如果update的话还是手动写SQL的好
[解决办法]
SqlCommandBuilder只有在用DataAdpater读取的表中含有主关键字时才会自动生成InsertCommand, UpdateCommand, DeleteCommand, (没有主关键字信息无法确定唯一行)。
你也可以自定义InsertCommand, UpdateCommand, DeleteCommand的。


UP

[解决办法]
什么不能直接用sqlcommand,一定要加上一sqlcommandbuilder才可以保存?我不明白什么?
====================================================================================
这是因为这样他就会自动生成Command语句,不用自己手动去配置这些Command语句
[解决办法]
sqlcommand不是.net的推荐方法吗?
[解决办法]
顶了再说
[解决办法]
up
[解决办法]
up

读书人网 >C#

热点推荐