已经完成了datatable读出access数据,在增加或删除了datatable表内数据后怎么同步到access内,请教完整代码,简单易懂的。
DataTable Row对象有RowState,根据RowState进行相关操作就行了,示例如下,有帮助麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~
原始数据
执行后
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("'", "'") + "','" + dr["sex"].ToString().Replace("'", "'") + "'," + dr["age"] + ")";
break;
case DataRowState.Modified://修改
sql = "update data set username='" + dr["username"].ToString().Replace("'", "'") + "',sex='" + dr["sex"].ToString().Replace("'", "'") + "',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