日期:2014-05-17  浏览次数:20919 次

ADO.NET里最简单的添加记录的方式是什么?闹了半天,发现ADO.NET怎么还不如ADO呢?怎么实现ADO里的AddNew呢?
闹了半天,发现ADO.NET怎么还不如ADO呢?怎么实现ADO里的这个常用功能呢?

在ADO里,我想添加记录,可以这样写:

m_pRecset.CreateInstance("ADODB.Recordset");
m_pRecset->Open("select * from Result",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);

m_pRecset->MoveLast(); 
m_pRecset->AddNew(); 
m_pRecset->PutCollect("ID",...); 
m_pRecset->PutCollect("RoadNum",vroadNum); 
m_pRecset->PutCollect("userName",_variant_t(theApp.user_Nmae)); 
m_pRecset->PutCollect("userID",_variant_t(theApp.user_ID)); 
m_pRecset->PutCollect("owner",_variant_t(city)); 
m_pRecset->PutCollect("saveTime",_variant_t(tm)); 
m_pRecset->Update();


可是,在ADO.NET里,就只有自己装配SQL语句了,


在C#里我这样,
                SqlDataAdapter da;
                SqlCommandBuilder scb;
                da = new SqlDataAdapter("select * from tbTree", SqlClass.strConnection);
                scb = new SqlCommandBuilder(da);

                DataSet ds = new DataSet("ds");
                da.Fill(ds, "tbTree");
                DataTable dt = ds.Tables[0];
                DataRow dr = dt.NewRow();
                dr["context"] = "ee";
                dr["parentid"] = 4;
                //dt.AcceptChanges();
                //ds.AcceptChanges();

                da.Update(ds, "tbTree");

可是不成功。

------解决方案--------------------
哥子,newrow了要add到rows集中中呀
按你的方法,更新数据库前需要datatable.getchanges()取得数据集的变更集合呀,这样取得的数据集才有需要的行状态以便ado.net生成相应的sql语句

------解决方案--------------------
引用:
你要设置sqldataadapter的insertcommand属性,
就你这个示例就是sda.insertcommand = scb.getinsertcommand()

看了一下你代码,你用了newRow后,还要调用ds.Tables[0].Rows.Add(newRow)