日期:2014-05-19  浏览次数:20903 次

mm急切请教!第一次使用CSDN,请教一个关于SqlCommandBuilder的问题?
SqlDataAdapter更新数据前与SqlCommandBuilder生成命令:

DataSet   ds   =   new   DataSet();
SqlDataAdapter   myda   =   new   SqlDataAdapter( "select   *   from   worktype ",connection);
SqlDataBuilder   scb   =   new   SqlDataBuilder(sda)
sda.Update(ds, "worktype ");

ds中只有一个表worktype,有字段worktype,与数据库表对应,

为什么用这种办法没新增数据的时候,不能将自增长的字段获取的值更新到ds.   如果我用SqlCommand每个生成SqlDataAdapter,然后再更新,则可以将数据库自动增长字段的值反映到ds中!!!!

应如何设置,才可以更新自增长值到ds中呢?

------解决方案--------------------
扔一个例子:第一次使用CSDN,不指望你会结贴了:(

SqlDataAdapter catDA = new SqlDataAdapter( "SELECT CategoryID, CategoryName FROM Categories ", nwindConn);
catDA.UpdateCommand = new SqlCommand( "UPDATE Categories SET CategoryName = @CategoryName " + "WHERE CategoryID = @CategoryID " , nwindConn);
catDA.UpdateCommand.Parameters.Add( "@CategoryName ", SqlDbType.NVarChar, 15, "CategoryName ");
SqlParameter workParm = catDA.UpdateCommand.Parameters.Add( "@CategoryID ", SqlDbType.Int);
workParm.SourceColumn = "CategoryID ";
workParm.SourceVersion = DataRowVersion.Original;

DataSet catDS = new DataSet();
catDA.Fill(catDS, "Categories ");
DataRow cRow = catDS.Tables[ "Categories "].Rows[0];
cRow[ "CategoryName "] = "New Category ";
catDA.Update(catDS);

------解决方案--------------------
up
------解决方案--------------------
你使用sql么?
如果是的话可以用@@IDENTITY 来表示你最新加入的记录的标识值
比如我们向数据库中插入一条数据,然后返回这条记录的自增长值。
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ( 'Damaged Goods ', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity ';//这里就取到了标识值,你改成自己的就行

------解决方案--------------------
那你是怎么添加的新的记录的,能把详细代码贴出来看下吗>
------解决方案--------------------
TO:我还是更新不到ds中去呀,数据库是新增了记录,但是我的ds表中字段还是空呀

当然是空的啊...

DataAdapter+SqlCommandBuider只是负责自动生成sql语句,将DataTable或者DataSet中对记录所作的改变更新到数据库中,但是并没有反向填充的过程,即不会将更新后的数据,再填充到DataSet中...

如果想获得更新后的值,就再从重新取一下,并填充...
------解决方案--------------------
TO:我以前用Command命令,都是可以自动将值生成在DataSet中的呀

那你能把这个测试的代码贴出来我看下吗?
------解决方案--------------------
对于为什么你用SqlCommandBuillder,最后DataSet中没有自增的字段,而你直接写SqlCommand却最后会有自增的字段...分析下两者的命令就知道了...

string _sql = "INSERT INTO COShipment(CostOrderID, ShipDate, ShipTo, Quantity,

UnitID) VALUES (@ " +
"CostOrderID, @ShipDate, @ShipTo, @Quantity, @UnitID); SELECT

COShipmentID, CostO " +
"rderID, ShipDate, ShipTo, Quantity, UnitID FROM COShipment WHERE

(COShipmentID = " +
" @@IDENTITY) ";
你在直接用Command时,在insert语句后还有一句查询语句即SELECT

COShipmentID, CostO "...而用SqlCommandBuider不会再生成后面一句查询命令的...
------解决方案--------------------
我来看mm
------解决方案--------------------
up
------解决方案--------------------
我来看mm

------解决方案--------------------