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

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

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();
        }
    }
}


代码仅供参考,对你有帮助的话,希望能够采纳!


using System;
using System.Collections.Generic;
using System.Data;            // 需包含的命名空间
using System.Data.OleDb;    // 需包含的命名空间
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Csharp连接ACCESS数据库 {
    class Program {
        static void Main(string[] args) {
            // 创建连接对象
            OleDbConnection odc = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\yangg\Desktop\Database3.accdb");

            // 表字段
            int age = 0;
            int id = 0;
            string name = "";
            // 返回受影响的行数
            int result = 0;


            #region 增加

            try {

                // 如果连接是关闭的,才进行打开
                if (odc.State == ConnectionState.Closed) {
                    odc.Open(); // 打开连接
                }

                Console.WriteLine("请输入插入的id:");
                id = int.Parse(Console.ReadLine());
                Console.WriteLine("请输入插入的name:");
                name = Console.ReadLine();
                Console.WriteLine("请输入插入的age:");
                age = int.Parse(Console.ReadLine());

                // sql操作语句
                string insert = "insert into student values(" + id + ", '" + name + "', " + age + ");";

                // 创建用于实现SQL语句的对象
                OleDbCommand oleDbCommand = new OleDbCommand(insert, odc);  // 参数一:sql语句 参数二:连接数据库的对象

                // 执行,并返回受影响的行数
                result = oleDbCommand.ExecuteNonQuery();

                Console.WriteLine("受影响的行数({0})", result);

            }
            catch (Exception e) {
                MessageBox.Show(e.ToString(), "提示");
            }
            finally {
                odc.Close();    // 断开连接
            }

            #endregion




            #region 删除

            try {

                // 如果连接是关闭的,才进行打开
                if (odc.State == ConnectionState.Closed) {
                    odc.Open();
                }

                Console.WriteLine("请输入删除的id:");
                id = int.Parse(Console.ReadLine());

                // sql操作语句
                string delete = "delete from student where id = " + id;

                // 创建用于实现SQL语句的对象
                OleDbCommand oleDbCommand2 = new OleDbCommand(delete, odc); // 参数一:sql语句 参数二:连接数据库的对象

                // 执行,并返回受影响的行数
                result = oleDbCommand2.ExecuteNonQuery();

                Console.WriteLine("受影响的行数({0})", result);

            }
            catch (Exception e) {
                MessageBox.Show(e.ToString(), "提示");
            }
            finally {
                odc.Close();
            }


            #endregion




            #region 修改

            try {

                // 如果连接是关闭的,才进行打开
                if (odc.State == ConnectionState.Closed) {
                    odc.Open();
                }

                Console.WriteLine("请输入修改的id:");
                id = int.Parse(Console.ReadLine());
                Console.WriteLine("请输入修改的name:");
                name = Console.ReadLine();
                Console.WriteLine("请输入修改该的age:");
                age = int.Parse(Console.ReadLine());

                // sql操作语句
                string update = "update student set Name = '" + name + "', Age = " + age + " where Id = " + id;

                // 创建用于实现SQL语句的对象
                OleDbCommand oleDbCommand3 = new OleDbCommand(update, odc);

                // 执行,并返回受影响的行数
                result = oleDbCommand3.ExecuteNonQuery();

                Console.WriteLine("受影响的行数({0})", result);

            }
            catch (Exception e) {
                MessageBox.Show(e.ToString(), "提示");
            }
            finally {
                odc.Close();
            }

            #endregion




            #region 查询

            try {

                // 如果连接是关闭的,才进行打开
                if (odc.State == ConnectionState.Closed) {
                    odc.Open();
                }

                Console.WriteLine("请输入查询的age:");
                age = int.Parse(Console.ReadLine());

                // sql操作语句
                string select = "select * from student where Age = " + age;

                // 创建设配器对象
                OleDbDataAdapter dbDataAdapter = new OleDbDataAdapter(select, odc);

                // 新建表对象
                DataTable dataTable = new DataTable();

                // 用设配器对象填充表对象
                dbDataAdapter.Fill(dataTable);

                // 将查找到的数据遍历输出
                foreach (DataRow dr in dataTable.Rows) {
                    Console.WriteLine("id = {0} name = {1} age = {2}", dr[0], dr[1], dr[2]);
                }

            }
            catch (Exception e) {
                MessageBox.Show(e.ToString(), "提示");
            }
            finally {
                odc.Close();
            }

            #endregion

            Console.ReadKey();
        }
    }
}

使用的 jQuery 里面的 datatable插件的么?

c#

foreach (var item in datatable.Rows)
{
int id = int.Parse(item["ID列"].ToString());
string sql = "select count * from table where id =" + id.ToString();
if (cmd.ExecuteScalar(sql, conn) > 0)
更新
else
插入
}

换个驱动就行了

HBIWQJISDNSFHAK