当前位置: 首页 > 编程语言 > C#

DataAdapter.Update()不更新数据库共享

时间:2023-04-10 22:33:02 C#

DataAdapter.Update()不更新数据库希望其他人会注意到我的错误。我已经在这个项目上工作了几周到一个月。我一直在混合使用旧的DataAdapter、CommandBuiler等和一些linqtosql编码在一个数据库上,有多个Windows应用程序表单。这种特殊形式使用DataAdapter、Dataset和CommandBuilder来编辑或删除数据库中的行。在我切换计算机之前它工作正常。现在数据集正在更新,但数据库没有。下面是这个表格的完整代码:privatevoidexitToolStripMenuItem_Click(objectsender,EventArgse){if(MessageBox.Show("ExitCookBook?","Exit?",MessageBoxButtons.OKCancel)==DialogResult.OK){Application.出口();}}privatevoidgoBackToolStripMenuItem_Click(objectsender,EventArgse){AddRecipegoBack=newAddRecipe();关闭();返回.Show();}privatevoidhelpToolStripMenuItem_Click(objectsender,EventArgse){MessageBox.Show("浏览食谱以查找您希望编辑或删除的食谱。","Help!");}SqlConnectioncon;SqlDataAdapter数据适配器;数据集数据配方;SqlCommandBuildercb;intMaxRows=0;国际公司=0;privatevoidEditRecipe_Load(objectsender,EventArgse){con=newSqlConnection();数据配方=新数据集();con.ConnectionString="DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Recipes.mdf;IntegratedSecurity=True;UserInstance=True";con.Open();//MessageBox.Show("数据库打开");字符串sql="选择*来自CookBookRecipes";dataAdapt=newSqlDataAdapter(sql,con);dataAdapt.Fill(dataRecipe,"CookBookRecipes");NavigateRecords();MaxRows=dataRecipe.Tables["CookBookRecipes"].Rows.Count;con.Close();}privatevoidNavigateRecords(){DataRowdRow=dataRecipe.Tables["CookBookRecipes"].Rows[inc];tbRName.Text=dRow.ItemArray.GetValue(0).ToString();listBox1.SelectedItem=dRow.ItemArray。GetValue(1).ToString();tbRCreate.Text=dRow.ItemArray.GetValue(2).ToString();tbRIngredient.Text=dRow.ItemArray.GetValue(3).ToString();tbRPrep.Text=dRow.ItemArray.GetValue(4).ToString();tbRCook.Text=dRow.ItemArray.GetValue(5).ToString();tbRDirections.Text=dRow.ItemArray.GetValue(6).ToString();tbRYield.Text=dRow。ItemArray.GetValue(7).ToString();textBox1.Text=dRow.ItemArray.GetValue(8).ToString();}privatevoidbtnNext_Click(objectsender,EventArgse){if(inc!=MaxRows-1){inc++;NavigateRecords();}else{MessageBox.Show("那就是你的烹饪书的最后一个食谱!”,“结束”);}}privatevoidbtnBack_Click(objectsender,EventArgse){if(inc>0){inc--;NavigateRecords();}else{MessageBox.Show("这是你的烹饪书的第一个食谱!","开始");}}privatevoidbtnSave_Click(objectsender,EventArgse){cb=newSqlCommandBuilder(dataAdapt);DataRowdaRow=dataRecipe.Tables["CookBookRecipes"].Rows[inc];daRow[0]=tbRName.Text;daRow[1]=listBox1.SelectedItem.ToString();daRow[2]=tbRCreate.Text;daRow[3]=tbRIngredient.Text;daRow[4]=tbRPrep.Text;daRow[5]=tbRCook.Text;daRow[6]=tbRDirections.Text;daRow[7]=tbRYield.Text;daRow[8]=textBox1.Text;如果(MessageBox.Show(“你希望保存更新?”,“保存更新?”,MessageBoxButtons.OKCancel)==DialogResult.OK){dataAdapt.Update(dataRecipe,"CookBookRecipes");MessageBox.Show("RecipeUpdated","Update");}}privatevoidbtnDelete_Click(objectsender,EventArgse){SqlCommandBuildercb;cb=新的SqlCommandBuilder(数据适应);if(MessageBox.Show("YouwishtoDELETEthisrecipe?","Delete?",MessageBoxButtons.OKCancel)==DialogResult.OK){dataRecipe.Tables["CookBookRecipes"].Rows[inc].Delete();MaxRows--;公司=0;导航记录();dataAdapt.Update(dataRecipe,"CookBookRecipes");MessageBox.Show("你的食谱已被删除","Delete");这应该更新表:dataAdapt.Update(dataRecipe,"CookBookRecipes");我没有收到任何错误,但数据表没有更新提前感谢您的帮助,如果您需要更多信息,请告诉我。为了更新数据库中的数据,您的SqlDataAdapter需要设置其InsertCommand、UpdateCommand、DeleteCommand属性。您创建的SqlCommandBuilder实例具有这些命令,但您需要将它们设置为SqlDataAdapter。在其他世界中:SqlCommandBuildercb之间;cb=newSqlCommandBuilder(dataAdapt);和dataAdapt.Update(dataRecipe,"CookBookRecipes");你需要dataAdapt.DeleteCommand=cb.GetDeleteCommand(true);dataAdapt.UpdateCommand=cb.GetUpdateCommand(true);dataAdapt.InsertCommand=cb.GetInsertCommand(true);SqlCommandforUpdate是什么样子的?我看到了命令,但没有看到任何SqlText,这是您所缺少的。您需要通过在SqlDataAdapter上设置.UpdateCommand属性来定义.Updatefunction此链接对如何操作有很好的细分:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter。updatecommand.aspx您可能需要DataAdapeter.AcceptChanges()我遇到了同样的问题:用一些新行填充了一个新数据集,但是更新时没有任何反应。我使用类似的MySqlDataAdapter。事实证明,当您需要MySqlCommandBuilder中的InsertCommand时,您必须将rowstate指定为已添加。另见:MSDN//更改此行DataRowdaRow=dataRecipe.Tables["CookBookRecipes"].NewRow();daRow[0]=tbRName.Text;daRow[1]=listBox1.SelectedItem.ToString();daRow[2]=tbRCreate.Text;daRow[3]=tbRIngredient.Text;daRow[4]=tbRPrep.Text;daRow[5]=tbRCook.Text;daRow[6]=tbRDirections.Text;daRow[7]=tbRYield.Text;daRow[8]=textBox1.Text;if(MessageBox.Show("Youwishtosaveyourupdates?","SaveUpdates?",MessageBoxButtons.OKCancel)==DialogResult.OK){//也添加和更改dataRecipe.Tables["CookBookRecipes"].Rows.Add(daRow);dataAdapt.Update(dataRecipe,"CookBookRecipes");MessageBox.Show("配方更新","更新");}}请尝试以下来源。privatevoidbtnSave_Click(objectsender,EventArgse){cb=newSqlCommandBuilder(dataAdapt);//旧来源:DataRowdaRow=dataRecipe.Tables["CookBookRecipes"].Rows[inc];//添加了源代码DataRowdaRow=dataRecipe.Tables["CookBookRecipes"].NewRow();//添加源代码dataRecipe.Tables["CookBookRecipes"].AddRow(daRow);daRow.BeginEdit();daRow[0]=tbRName.Text;daRow[1]=listBox1.SelectedItem.ToString();daRow[2]=tbRCreate.Text;daRow[3]=tbRIngredient.Text;daRow[4]=tbRPrep.Text;daRow[5]=tbRCook.Text;daRow[6]=tbRDirections.Text;daRow[7]=tbRYield.Text;daRow[8]=textBox1.Text;daRow.EndEdit();//将行的状态重置为未更改dataRecipe.Tables["CookBookRecipes"].AcceptChanges();//设置修改。dataAdapt将为具有已修改行状态的行调用更新存储过程。//您也可以为要插入的新行尝试SetAdded()方法daRow.SetModified();if(MessageBox.Show("你想保存更新tes?","保存更新?",MessageBoxButtons.OKCancel)==DialogResult.OK){dataAdapt.Update(dataRecipe,"CookBookRecipes");MessageBox.Show("RecipeUpdated","Update");}}在更新中在为我工作之前添加AcceptChangesDuringUpdate,例如:foreach(stringtableNameintableNames){da=newSqlDataAdapter("SELECT*FROM"+tableName,cn);cb=newSqlCommandBuilder(da);//初始化更新、插入和删除da的命令da.AcceptChangesDuringUpdate=true;da.Update(myDataSet,tableName);}我遇到了同样的问题我的dataadapter.fill工作但dataadapter.update没有工作。我意识到问题是我的数据库表没有包含主键。在我修改我的表以包含带有主键的列后,dataadapter.fill工作。希望这对某人有所帮助。以上是C#学习教程:DataAdapter.Update()不更新数据库的全部内容分享一下,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: