wuwei1378 2021-08-11 09:15 采纳率: 66.7%
浏览 379
已结题

已经完成了datatable读出access数据,在增加或删除了datatable表内数据后怎么同步到access内?请教完整代码,简单易懂的。

已经完成了datatable读出access数据,在增加或删除了datatable表内数据后怎么同步到access内,请教完整代码,简单易懂的。

  • 写回答

7条回答 默认 最新

  • CSDN专家-showbo 2021-08-11 14:50
    关注

    DataTable Row对象有RowState,根据RowState进行相关操作就行了,示例如下,有帮助麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~
    原始数据
    img
    执行后

    img

    using System;
    using System.Data;
    using System.Data.OleDb;
    using System.Collections.Generic;
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<string> delIds = new List<string>();//用于存储删除的记录id
    
                var conn = new OleDbConnection(@"provider=microsoft.ace.oledb.12.0;data source=D:\文件\C#\Console\ConsoleApp1\bin\Debug\data.accdb");
                DataTable dt = new DataTable();
                var da = new OleDbDataAdapter("select id,username,sex,age from data", conn);//age为数字型,其他字符串
                da.Fill(dt);
    
                dt.Rows.Add(0, "username3", "sex3", 33);//新增一行,id列赋值为0
    
    
                DataRow row = dt.Rows[0];//要删除的行
                delIds.Add(row["id"].ToString());//注意remove前将id添加delIds列表
                dt.Rows.Remove(row);
    
    
    
                dt.Rows[0]["username"] = "update username row2";//更改第一行数据(原第二行数据,上面remove后变第一行)的用户名
    
                List<string> sqls = new List<string>();//用于存储生成的SQL,以便执行
                string sql = "";
    
                //遍历数据行生成添加和修改的记录的SQL
                foreach (DataRow dr in dt.Rows)
                {
                    sql = "";
                    switch (dr.RowState)
                    {
                        case DataRowState.Added://新增
                            sql = "insert into data(username,sex,age)"
                                + "values('" + dr["username"].ToString().Replace("'", "&apos;") + "','" + dr["sex"].ToString().Replace("'", "&apos;") + "'," + dr["age"] + ")";
                            break;
                        case DataRowState.Modified://修改
                            sql = "update data set username='" + dr["username"].ToString().Replace("'", "&apos;") + "',sex='" + dr["sex"].ToString().Replace("'", "&apos;") + "',age= where id=" + dr["id"];
                            break;
                    }
                    if (sql != "") sqls.Add(sql);
                }
                //生成删除的sql语句
                if (delIds.Count > 0) sqls.Add("delete from data where id in(" + string.Join(",", delIds) + ")");
    
    
                if (sqls.Count > 0)
                {
                    conn.Open();
                    //遍历sql语句执行
                    OleDbCommand cmd = new OleDbCommand() { Connection = conn };
                    foreach (string s in sqls)
                    {
                        cmd.CommandText = s;
                        cmd.ExecuteNonQuery();
                        Console.WriteLine(s);
                    }
                }
    
                conn.Close();
                Console.ReadKey();
            }
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 8月23日
  • 已采纳回答 8月15日
  • 创建了问题 8月11日

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图