度量快速开发平台-业界最好的全功能软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 85|回复: 4

[分享] 利用OracleCommandBuilder实现 datatable与数据库的增删改

[复制链接]

182

主题

2120

帖子

4842

积分

论坛元老

Rank: 8Rank: 8

积分
4842
发表于 2018-1-19 17:56:54 | 显示全部楼层 |阅读模式
这个数据库交互的类我是以单例模式实现的,"_"开头的都是已经生成唯一的实例。
旧数据用sql语句查询出的dataTable,发生改变后dataTable(增加,删除,修改),增改是利用OracleCommandBuilder自身Update(table),它可以实现增加和修改(需要主键)。
删除是利用旧datable与修改后的datable之间取交差,获取需要删除的数据。

/// <summary>
/// datatable与数据库的增删改的实现
/// </summary>
/// <param name="table"></param>
/// <param name="CommandText">sql语句</param>
/// <param name="key"></param>
/// <param name="tableName"></param>
/// <returns></returns>
public int UpdateAndDeleteTable(DataTable table, string CommandText,string key,string tableName)
{
//更新和新增
OracleCommandBuilder ocb = new OracleCommandBuilder(_oracleDataAdapter);
_oracleDataAdapter.SelectCommand.CommandText = CommandText;
_oracleDataAdapter.InsertCommand = ocb.GetInsertCommand();
int updete=_oracleDataAdapter.Update(table);
//删除:差集删除
DataTable oldTable = this.GetDataTable(CommandText);
var query = oldTable.AsEnumerable().Except(table.AsEnumerable(), DataRowComparer.Default);
if (query.Count()==0)
{
return updete;
}
StringBuilder sb = new StringBuilder();
sb.Append($"delete {tableName} where {key} in(");

foreach (var row in query)
{
sb.Append("'"+row[key].ToString()+"',");
}
sb.Remove(sb.Length - 1, 1);
sb.Append(")");
string sql = sb.ToString();
int delete = ExcuteSql(sql);
return updete+ delete;
}

回复

使用道具 举报

182

主题

2120

帖子

4842

积分

论坛元老

Rank: 8Rank: 8

积分
4842
 楼主| 发表于 2018-1-19 17:57:24 | 显示全部楼层
回复

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
发表于 2018-1-22 14:28:49 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
发表于 2018-1-22 17:45:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
发表于 2018-1-23 16:22:06 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2018-5-23 15:29 , Processed in 0.310651 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表