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 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算