Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将DataSet更改保存到MYSQL数据库表时出现的问题

将DataSet更改保存到MYSQL数据库表时出现的问题
EN

Stack Overflow用户
提问于 2012-09-11 20:45:22
回答 1查看 443关注 0票数 0

我正在用表A中的数据填充一个dataGridView,该表属于一个MySQL数据库表。在插入新数据或修改DataTable A的数据后调用SaveChangestoDb( string TableName)方法时-更改将保存到DB,但当我将批准的DataRows从表A传输到表B,然后从表A删除批准的行时...保存对表A所做的更改失败。它不抛出任何异常。

我使用BindingSource将表A绑定到dataGridView,并使用CommandBuilder获取DataAdapter上的更新。

下面是我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    private const string ConnectionString =
        "server=*****.**;Port=****;database=**;username=****;password=*****;pooling=false;";

    private DataSet _localDatabaseCopy;
    private MySqlDataAdapter _myDataAdapter;

    private void Form1_Load(object sender, System.EventArgs e)
    {
        InitializeLocalDatabaseCopy();
        InitializeDataGridView();
        dataGridView1.AllowUserToAddRows = false;
    }

    /// <summary>
    ///  Binds the DataGridView to the BindingSource and load the data from the database.
    /// </summary>

    private void InitializeDataGridView()
    {
        DataTable dataTable = _localDatabaseCopy.Tables[Resources.WorkingDataDatabaseTableName];
        dataGridView1.DataSource = new BindingSource { DataSource = dataTable };
        dataGridView1.MultiSelect = true;
        dataTable.Columns[Resources.ColumnName_IDNr].AutoIncrement = true;
        dataTable.Columns[Resources.ColumnName_IDNr].AutoIncrementSeed = -1;
        dataTable.Columns[Resources.ColumnName_IDNr].AutoIncrementStep = -1;


    }
    /// <summary>
    /// Fills the _myDataAdapter DataAdapter with the workingData & approvedData DataTables and adds the 2 DataTables to the _localDatabaseCopy DataSet.
    /// </summary>
    private void InitializeLocalDatabaseCopy()
    {
        _localDatabaseCopy = new DataSet();
        DataTable workingData = new DataTable(Resources.WorkingDataDatabaseTableName);
        DataTable approvedData = new DataTable(Resources.ApprovedDataDatabaseTableName);
        using (MySqlConnection connection = new MySqlConnection(ConnectionString))
        {
            _myDataAdapter = new MySqlDataAdapter(string.Format("select * from {0}", Resources.WorkingDataDatabaseTableName), connection);
            _myDataAdapter.Fill(workingData);
            _myDataAdapter.SelectCommand.CommandText = string.Format("select * from {0}", Resources.ApprovedDataDatabaseTableName);
            _myDataAdapter.Fill(approvedData);
        }

        _localDatabaseCopy.Tables.Add(workingData);
        _localDatabaseCopy.Tables.Add(approvedData);
    }



    private void SaveChangesToDb(string tableName)
    {
        MySqlCommandBuilder builder = new MySqlCommandBuilder(_myDataAdapter);

        _myDataAdapter.SelectCommand.CommandText = String.Format("select * from {0}", tableName);
        _myDataAdapter.UpdateCommand = builder.GetUpdateCommand();
        _myDataAdapter.DeleteCommand = builder.GetDeleteCommand();
        _myDataAdapter.InsertCommand = builder.GetInsertCommand();

        DataTable deletedRecords = _localDatabaseCopy.Tables[tableName].GetChanges(DataRowState.Deleted);
        DataTable modifiedRecords = _localDatabaseCopy.Tables[tableName].GetChanges(DataRowState.Modified);
        DataTable addedRecords = _localDatabaseCopy.Tables[tableName].GetChanges(DataRowState.Added);
        try
        {
            if (deletedRecords != null)
                _myDataAdapter.Update(deletedRecords);
            if (modifiedRecords != null)
                _myDataAdapter.Update(modifiedRecords);
            if (addedRecords != null)
                _myDataAdapter.Update(addedRecords);

            _localDatabaseCopy.AcceptChanges();

        }
        catch (Exception exception)
        {
            MessageBox.Show(exception.Message);
        }
        finally
        {
            if (deletedRecords != null)
                deletedRecords.Dispose();
            if (modifiedRecords != null)
                modifiedRecords.Dispose();
            if (addedRecords != null)
                addedRecords.Dispose();
        }

    }



    private void btnSave_Click(object sender, EventArgs e)
    {

        SaveChangesToDb(Resources.WorkingDataDatabaseTableName);

    }


    private void DeleteDataRows(DataRow[] rowsToDelete, string tableIndex)
    {
        foreach (DataRow row in rowsToDelete)
            _localDatabaseCopy.Tables[tableIndex].Rows.Remove(row);
    }


    /// <summary>
    /// Transfers the approved DataRows from the DataTable/DataGridview to the Approved Table in the MySql Database
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnTransferApproved_Click(object sender, EventArgs e)
    {
        SetWaitingCursor();

        TransferApprovedDataRows();
        DeleteTransferedRowsFromWorkingDataTable();
        SaveChangesToDb(Resources.WorkingDataDatabaseTableName);

        SetDefaultCursor();
    }

    private void DeleteTransferedRowsFromWorkingDataTable()
    {
        DataRow[] approvedRowsToDelete = _localDatabaseCopy.Tables[Resources.WorkingDataDatabaseTableName].Select("Approved = 1");
        DeleteDataRows(approvedRowsToDelete, Resources.WorkingDataDatabaseTableName);

    }

    private void TransferApprovedDataRows()
    {
        DataTable myTableCopy = _localDatabaseCopy.Tables[Resources.WorkingDataDatabaseTableName].Copy();
        DataRow[] approvedRows = myTableCopy.Select("Approved = 1");

        // if there are no rows which have been approved, quit
        if (approvedRows.Any())
        {
            foreach (DataRow row in approvedRows)
            {
                // checking if the row which is to be approved already exists in the approved-table
                bool redundant = false;
                foreach (
                    DataRow approvedRow in _localDatabaseCopy.Tables[Resources.ApprovedDataDatabaseTableName].Rows)
                    redundant |= approvedRow[Resources.ColumnName_IDNr].ToString() ==
                                 row[Resources.ColumnName_IDNr].ToString();

                if (!redundant)
                    _localDatabaseCopy.Tables[Resources.ApprovedDataDatabaseTableName].Rows.Add(row.ItemArray);
            }
            // writing the changes back to the database, Approved Table
            SaveChangesToDb(Resources.ApprovedDataDatabaseTableName);
        }

        if (!approvedRows.Any())
            return;


    }


}

}

EN

回答 1

Stack Overflow用户

发布于 2012-09-11 20:51:52

问题出在您的DeleteDataRows方法中。从表中删除行并不会将它们标记为删除,它只是将它们从表的内存中表示形式中删除。您需要调用DataRow.Delete

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void DeleteDataRows(DataRow[] rowsToDelete, string tableIndex)
{
    foreach (DataRow row in rowsToDelete)
        row.Delete();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12377633

复制
相关文章
将爬取的数据保存到mysql中
      create database scrapy (我新建的数据库名称为scrapy)
py3study
2020/01/19
3.7K0
将存储过程执行的结果保存到临时表
CREATE PROCEDURE Proc1 @a varchar(50) AS SELECT Id, NAME FROM Table1 WHERE NAME=@a GO
全栈程序员站长
2022/07/15
1.7K0
MySQL批量更改数据库表结构字符集
# 根据转换字符集 修改 utf8mb4 ---> utf8mb4_general_ci SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' ) FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = 'DATABASE_NAME'; # 更改 DATABASE_NAME
用户7657330
2021/12/07
4K0
使用python将csv文件快速转存到mysql
因为一些工作需要,我们经常会做一些数据持久化的事情,例如将临时数据存到文件里,又或者是存到数据库里。
我被狗咬了
2019/09/23
6.3K0
使用python将csv文件快速转存到mysql
JavaScript 使用 for 循环时出现的问题
有一些项目组在定位问题的时候发现,在使用 “for(x in array)” 这样的写法的时候,在 IE 浏览器下,x 出现了非预期的值。
四火
2022/07/15
4K0
JavaScript 使用 for 循环时出现的问题
运行basenji框架时出现的问题
2.分不清哪个是输入,输出是什么。另外每个数据集对应的参数param.json文件对应的什么
bye
2021/03/22
2.4K0
运行basenji框架时出现的问题
mysql数据库(6):将数据装入表中
mysql> INSERT INTO pet -> VALUES('hanhan','川川','hh','f','2021-7-21',NULL);
川川菜鸟
2021/10/18
3.1K0
SQLserver2019当保存时出现不允许保存更改,阻止保存要求重新创建表的更改解决方案。
第一步:工具→选项 2,取消勾选
SingYi
2022/07/14
1.6K0
SQLserver2019当保存时出现不允许保存更改,阻止保存要求重新创建表的更改解决方案。
更改 WordPress 数据库表名前缀
众所周知,WordPress 在安装时候可以选择表名前缀以在同一数据库安装多个WordPress 程序。但是很多空间商,尤其是老外的虚拟主机商 允许建立多个数据库,这样为了便于管理,很多人在安装多个WordPress 程序的时候选择多个数据库而不是修改表名前缀,当然这样的方式也是被提倡的。 所谓天有不测风云,人有旦夕祸福。如若碰到多个数据库合为单个数据库的时候,头疼事情就来了,这种情况往往在从国外往国内搬的时候,国内空间商不知道为何如此吝啬 🙁 table_prefix = ‘wp_’; 改为 既
Denis
2023/04/13
1.6K0
MYSQL分页查询时没有用ORDER BY出现数据重复的问题
产品反馈,用户在使用分页列表时,出现数据重复的问题,查看代码后发现对应的分页SQL并没有使用order by进行排序,但是印象中Mysql的InnoDB引擎会默认按照主键id进行排序,本地测试了一下的确出现了部分数据在不同的页都出现的问题。
翎野君
2023/05/12
1.7K0
MYSQL分页查询时没有用ORDER BY出现数据重复的问题
MySQL更改数据库名
执行上述shell脚本 chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本
用户10325771
2023/03/01
5.2K0
java 安装配置时出现的问题
Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg') jdkerror  前些日子装了个jdk7试了试,后来做项目需要换成jdk6,安装完jdk6,设置完环境变量后出现问题。运行java -version出现Error: could not open `C:\Program Files\Java\jre7\lib\i586\jvm.cfg'),运行javac -version则是正常的javac 1.6.0_32。googl
Gxjun
2018/03/22
2.2K0
Ubuntu安装时出现黑屏问题的解决
问题描述:Ubuntu使用光盘/USB安装时,出现"install ubuntu/ try ubuntu without installation"选择,但是Enter安装时,显示器显示没有信息,进行休眠
知忆
2021/06/07
13.9K0
【已解决】如果将MySQL数据库中的表生成PDM
有时候,我们需要MySQL数据库中的表生成对应的PDM文件,这里凯哥就讲讲第一种将MySQL数据库的表生成对应的PDM文件。
凯哥Java
2023/07/31
4740
【已解决】如果将MySQL数据库中的表生成PDM
Mysql - 删除表时出现: Cannot delete or update a parent row: a foreign key constraint fails
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
小菠萝测试笔记
2020/06/09
2K0
ASP.NET将Session保存到数据库中
因为ASP.NET中Session的存取机制与ASP相同,都是保存在进行中, 一旦进程崩溃,所有Session信息将会丢失,所以我采取了将Session信息保存到SQL Server中,尽管还有其它的 几个方式(本文不作介绍),要将Session保存到SQL Server中,需要有以下几个步骤: 1.首先要创建用于保存Session数据的数据库,以命令行的形式用aspnet_regsql.exe来完成,具体命令为 C:\WINDOWS\Microsoft.NET\Framework\v2.0.5072
磊哥
2018/04/26
2.6K0
爬取网站文章将图片保存到本地并将HTML的src属性更改到本地
每次当你爬取一篇文章时,不管是从csdn或者其他网站,基本内容都是保存在一个富文本编辑器中,将内容提取出来还是一个html,保存之后图片还在别人的图片服务器上。我今天要说的就是将图片保存之后并将它的src属性替换成本地的地址。并且以次替换,按照原文章排版顺序替换。
andrew_a
2019/07/30
1.9K0
MYSQL 生产环境字段更改的failed的问题
早上看到微信一个银行的同学问了小问题,希望他不要背锅,具体问题是MYSQL 一个50G的表要更改字段,将一个字段从varchar(3) 改成varchar(6). MYSQL 5.7 官版。因为根据官方和在测试系统测试的结果来看,不应该是缓慢的,应该是很快完成的。
AustinDatabases
2020/06/05
1.9K0
上传文件时出现跨域问题
所以啊,这根本不是跨域的问题,Tomcat默认上传的文件大小就是1MB,你上传的文件超过而已。
乐心湖
2020/07/31
3.6K0
上传文件时出现跨域问题
点击加载更多

相似问题

无法将更改保存到dataset

27

将&#8539;htmlentity保存到数据库时出现问题(PHP/MySQL)

12

将DataSet保存到数据库

10

使用jquery datepicker将日期保存到数据库mysql时出现问题

30

将数据保存到数据库时出现问题

47
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文