Tag: dataset

如何正确地将bindingSource更改提交到源数据库?

我设置了DataGridView和其他UI组件,以允许用户编辑来自SQLite DB的数据。 但是这些更改(即使它们在应用程序中正确显示)也不会保存到DB。 我试过这段代码 aBindingSource.EndEdit(); dbDataSetA.GetChanges(); aTableAdapter.Update(dbDataSetA.Accounts); 但是有并发exception: System.Data.DBConcurrencyException未处理Message = Concurrency violation:UpdateCommand影响了预期的1条记录中的0条。 那么我应该如何将绑定源更改提交给DB,伙计们呢? POST EDIT我启动程序时遇到此exception,然后单击DataGridView中的第二行,然后单击第三行,此时程序引发并发exception。 希望他的帮助能让这个问题更加详细。 先谢谢你,伙计们!

获取2个DataSet的差异c#

我正在编写一个简短的算法,它必须比较两个DataSet,以便可以进一步处理两者之间的差异。 我尝试通过合并这两个DataSet来完成这个目标,并将结果更改到新的DataSet中。 我的方法如下所示: private DataSet ComputateDiff(DataSet newVersion, DataSet oldVersion) { DataSet diff = null; oldVersion.Merge(newVersion); bool foundChanges = oldVersion.HasChanges(); if (foundChanges) { diff = oldVersion.GetChanges(); } return diff; } foundChanges的结果始终为false,即使两个DataSet中的值不同。 两个DataSet都具有相同的结构。 它们由三个DataTable组成,这三个DataTable是数据库中三个查询的结果。 合并工作没有问题。 我的问题是:有没有合理的解释为什么foundChanges变量总是假的,如果不是,Linq会为这个问题提供一个合适的解决方案,或者我必须通过迭代DataSet来确定更改 以下是一些进一步的信息:编程语言是C#我正在使用.Net framework 4.0我在Windows 8机器上开发所提到的数据来自数据库(MSSQL Server 2012 express)我的DataSet或DataTables没有任何PK的我所知道的。 提前致谢

如何将ObservableCollection OrderBy()传递给DataSet

我有一个ObservableCollection类,如下所示: public ObservableCollection GetModules() { DataSet ds = StoreDbDataSet.ReadDataSet(); ObservableCollection modules = new ObservableCollection(); foreach (DataRow moduleRow in ds.Tables[“Modules”].Rows) { modules.Add(new Module(moduleRow[“ModelNumber”].ToString(), moduleRow[“ParamName”].ToString(), (UInt16)moduleRow[“ParamValue”], (UInt16)moduleRow[“DefaultValue”], (UInt16)moduleRow[“MaxValue”], (UInt16)moduleRow[“MinValue”], (uint)moduleRow[“Address”])); } return modules; } 所以在我的用法中,我这样做了: private ObservableCollection myModulesList; private void RefreshModulesByOrder() { myModulesList = new ObservableCollection(sdb.GetModules().OrderBy(mod => mod.Address)); ModulesView = CollectionViewSource.GetDefaultView(myModulesList); ModulesView.Filter = obj => { var […]

创建新的类型化DataSet对象(c#)

我使用DataGrid来显示xml文件。 Grid的DataSource是一个Typed DataSet。(使用schema) Assembly assembly = Assembly.GetExecutingAssembly(); Stream stream = assembly.GetManifestResourceStream(“XML_Reader.Resources.schema.xsd”); XmlSchemaSet schemas = new XmlSchemaSet(); XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.Schemas.Add(null, XmlReader.Create(stream)); using (XmlReader reader = XmlReader.Create(xmlFile, settings)) { newDataSet.ReadXml(reader); } dataGrid.DataSource = newDataSet; 我在我的项目中添加了一个xsd模式,并使用MSDataSetGenerator生成newDataSet。 (VS2008)。 现在我想为我读取的每个新( 分层xml )文件创建一个新的DataSet对象。 创建一个新的DataSet对象不是问题,但数据类型是不正确的,所以我不能很好地对它们进行排序(特别是数字字段)。 在我看来,我需要创建一个新的Typed DataSet 。 那么我该如何解决这个问题呢?

C#中DataSet和DataGridView之间的DataBinding

我目前在表单上有一个DataGridView,我想在DataSet中使用DataTable,从SQlite数据库填充(使用System.Data.SQlite)。 所以,我在数据库和DataSet之间有一个DataAdapter,可以直接将DataGridView数据源设置为DataTable。 这显示很好。 我的问题是:为什么我要在这里使用绑定源? 很多教程都说你可以使用或不使用它。 但除了增加额外的步骤之外,它有什么用处吗? 另外,如果我想在更改DataGridView时更新数据库,怎么办呢? DataSet是否自动更新 – 所以我只需要告诉DataAdapter更新? 或者绑定源是否有用? 谢谢!

如何在更改数据库后保存DataSet?

如果我有一个名为myDs的DataSet,我通过循环中的直接访问来编辑其中的字段,如下所示: for (int i = 0; i < myDS.Tables[TableName].Rows.Count; i++) { //some function or web method to get the id value of the record being updated int n = getNewNumber(); //updating the dataset record according to some condition if (n == 0) { myDS.Tables[TableName].Rows[i]["id"] = n; myDS.Tables[TableName].Rows[i]["description"] = "some data"; } else { myDS.Tables[TableName].Rows[i]["id"] = […]

DataGridView C#编辑模式下的行中的默认值

我有一个程序,用于使用gridview将值输入数据库。 gridview中填充了一个DataSet的“空”结果,该结果从我想要的表中查询该数据库。 这将使用我想要的正确列填充网格(即,来自db中某个表的空行的网格)。 填写列时,我会获取数据并手动更新数据库。 我如何使用gridview的基本示例: this.fullUutDataTableAdapter.Fill(this.dalsaUutDataSet.ResultsFullUut); DataView dv = this.dalsaUutDataSet.ResultsFullUut.DefaultView; Grid_modify.DataSource = dv; foreach(DataGridViewRow dr in Grid_modify.Rows) { dr.Cells[“YieldID”].Value = -1; } 但是,我希望某些列具有默认值。 我已经尝试更改列的默认值,但您无法更改属性,只能“获取”它。 或者,我尝试解析空网格中的行并填充值。 当网格最初加载时(值显示在适当的位置),这可以正常工作。 然而,当我进入编辑模式时,这些值一无所获。 NEXT,我尝试使用一些RowEdit事件,并在输入编辑模式时尝试填充值,但是,当您进入和退出编辑模式时,这会导致问题。 似乎是一种看似必要的更复杂,更混乱的做事方式。 所以问题是,在某些列中使用默认值填充gridview的最佳方法是什么? 我更希望“最干净”的解决方案成为可能。 但是,我认识到事情并不总是这样…… 感谢您的帮助! 干杯。

重置主键

我试图在网上找到答案,但显然无法完成(我的意思是在应用程序级别,而不是数据库)。 我需要完全清除我的数据集并同时重置主键。 有任何想法吗? 或者,我可以使用的一个hack是重新初始化数据集,但这似乎不可能,因为数据集在应用程序中的不同类之间共享(我在Program.cs中创建共享数据集)。 谢谢 法鲁克 更新: 好吧,我试过这个: MyDataSet sharedDS = new MyDataSet(); 。 。 。 CleanDS() { MyDataSet referenceDS = new MyDataSet(); sharedDS.Table1.Reset(); sharedDS.Merge(referenceDS); } 我的原始问题已解决,但现在我得到一个System1的System.ArgumentException不属于Table1,我可以在其中看到DataSet Viewer中的列以及查看填充的行。 另请注意,我可以手动重新创建整个DataSet,但仍然会出现相同的错误。 有任何想法吗?

使用TableAdapter重新加载数据

private void UserList_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the ‘workOrdersDataSet.users’ table. You can move, or remove it, as needed. this.usersTableAdapter.Fill(this.workOrdersDataSet.users); } 如果以其他forms进行更改,如何重新加载数据? (最好是自动不使用刷新按钮)? 我正在使用WinForms,后端是Access 2007。 使用Designer将数据绑定到Datagrid

如何使用lambda表达式过滤DataRows?

如何在数据表中搜索Col1 =“MyValue”的行中的行 我在想类似的东西 Assert.IsTrue(dataSet.Tables[0].Rows. FindAll(x => x.Col1 == “MyValue” ).Count == 1); 但当然这不起作用!