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

给数据库增加记录的问题
//连接数据库
string   L_SqlString   =   "select   *   from   Engineering   where   Engineering= ' "   +   L_Engineering   +   " ' ";
OleDbDataAdapter   OleDbDr   =   new   OleDbDataAdapter(L_SqlString   ,DBConnection   .OleDbConnSingle   );


                                DataSet   thisDataSet   =   new   DataSet();
                                OleDbDr.Fill(thisDataSet, "gongcheng ");
//如果数据库没有记录,则增加
                                if   (thisDataSet.Tables[ "gongcheng "].Rows.Count   <=   0)
                                {
                                        DataRow   thisDataRow   =   thisDataSet.Tables[ "gongcheng "].NewRow();
                                        thisDataRow[ "Engineering "]   =   L_Engineering;
                                        thisDataRow[ "Remark "]   =   L_Remark;
                                        thisDataSet.Tables[ "gongcheng "].Rows.Add(thisDataRow);

//到下边这步,程序就提示说:当传递具有新行的   DataRow   集合时,更新要求有效的   InsertCommand。
                                        OleDbDr.Update(thisDataSet   , "gongcheng ");
                                                           
                                       
                                }

我这个程序是参照《c#入门经典》上来的。

------解决方案--------------------
还有这样增加呀?如果判断为空则直接用insert 增加不是更好?
------解决方案--------------------
使用UPDATE来自动生成SQLCOMMAND时,需要先建立CommandBuilder的实例

OleDbDataAdapter da = new OleDbDataAdapter;
OleDbCommandBuilder cb = new OleDbCommandBuilder(da)
------解决方案--------------------
update不配合OleDbCommandBuilder也是可以用的

使用OleDbCommandBuilder的目的是为了自动生成sql语句,但有一个前提是数据表必须有主键且主键必须包含在返回的结果集中

否则只要自己指定了
da.InsertCommand.CommandText
da.DeleteCommand.CommandText
da.UpdateCommand.CommandText
一样可以运行update();
------解决方案--------------------
在OleDbDr.Update(thisDataSet , "gongcheng ");
前加句:OleDbCommandBuilder ocb = new OleDbCommandBuilder(OleDbDr);
试试