问题描述
更新代码如下:oledataAdaper.Update(DataSet.Tables[TName]);DataSet.Tables[TName].AcceptChanges();DataSet.AcceptChanges();注:只是针对单张表,只是update操作,表没有主键。错误说明:“当传递具有已经修改行的datarow集合时,更新要求有效的updatecommand”
解决方案
解决方案二:
沙发帮忙顶
解决方案三:
谢谢,希望更多人过来看看,指点一下迷津
解决方案四:
给为我把全部代码贴上,请分析一下privateOleDbConnectionOleConn=newOleDbConnection();privateOleDbDataAdapterOleAdapter;DataSetDSet=newDataSet();publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){stringstrCon=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=|DataDirectory|database.mdb";OleConn.ConnectionString=strCon;OleConn.Open();stringstrSql="SELECT*FROMtablename";OleAdapter=newOleDbDataAdapter(strSql,OleConn);OleAdapter.Fill(DSet,tablename);BindingSourceBSource=newBindingSource();BSource.DataSource=DSet.Tables[tablename];dataGridView1.DataSource=BSource;}privatevoidbtnSave_Click(objectsender,EventArgse){if(DSet.Tables["北京市土壤养分定级标准2007"].GetChanges()!=null){OleAdapter.Update(DSet.Tables["北京市土壤养分定级标准2007"]);DSet.AcceptChanges();}}说明:数据库中的表没有主键;我查了一些文章,也请教过一些人,他们说直接把oledbadaper更新就可以了,但是我的就不行,苦恼啊。目的:我只是想直接在datagridview上修改,然后保存到数据库中。错误:当传递具有已修改行的DataRow集合时,更新要求有效的UpdateCommand。各位帮帮忙,在线等
解决方案五:
补充一下tablename="北京市土壤养分定级标准2007";刚才发的时候后面没有看见,没有改掉
解决方案六:
这个问题我也遇到过,不过忘记怎么解决了。好像是update语句有问题。
解决方案七:
学习
解决方案八:
是oledbdataadapter.update()么,我试了其他的重载也不行,提示的错误都不一样了。
解决方案九:
谁解决了,20分就给他了,在线等
解决方案十:
加入下列语句myCommandBuilder=newSystem.Data.OleDb.OleDbCommandBuilder(myDataAdapter);oledbdataadapter.DeleteCommand=myCommandBuilder.GetDeleteCommand();oledbdataadapter.UpdateCommand=myCommandBuilder.GetUpdateCommand();oledbdataadapter.InsertCommand=myCommandBuilder.GetInsertCommand();然后调用OleAdapter.Update(DSet.Tables["北京市土壤养分定级标准2007"]);DSet.AcceptChanges();
解决方案十一:
对于没有主键的数据集不能使用Commandbuilder来自动生成相关的sqlcommander必须手动的指定更新所需的commander例如privatestaticOleDbDataAdapterCreateCustomerAdapter(OleDbConnectionconnection){OleDbDataAdapterdataAdapter=newOleDbDataAdapter();OleDbCommandcommand;OleDbParameterparameter;//CreatetheSelectCommand.command=newOleDbCommand("SELECT*FROMdbo.Customers"+"WHERECountry=?ANDCity=?",connection);command.Parameters.Add("Country",OleDbType.VarChar,15);command.Parameters.Add("City",OleDbType.VarChar,15);dataAdapter.SelectCommand=command;//CreatetheUpdateCommand.command=newOleDbCommand("UPDATEdbo.CustomersSETCustomerID=?,CompanyName=?"+"WHERECustomerID=?",connection);command.Parameters.Add("CustomerID",OleDbType.Char,5,"CustomerID");command.Parameters.Add("CompanyName",OleDbType.VarChar,40,"CompanyName");parameter=command.Parameters.Add("oldCustomerID",OleDbType.Char,5,"CustomerID");parameter.SourceVersion=DataRowVersion.Original;dataAdapter.UpdateCommand=command;returndataAdapter;}