重构insert update 比较两个datatbale
#region 下载时重构insert(数据带null处理)
public void DownDataInsert(DataTable _dt, string TableName,DBHelper dbhelper)
{
List<string> _List = new List<string>();
try
{
if (_dt == null)
{
throw new Exception("datatable不可为空!");
}
if (string.IsNullOrEmpty(TableName))
{
throw new Exception("表名不可为空!");
} for (int i = ; i < _dt.Rows.Count; i++)
{
string sqlstring = string.Empty;
string sqlString = "insert into " + TableName + " ({0}) VALUES ({1})";
string Names = string.Empty;
string values = string.Empty;
foreach (DataColumn c in _dt.Columns)
{
if (_dt.Rows[i][c.ColumnName] != null && !string.IsNullOrEmpty(_dt.Rows[i][c.ColumnName].ToString()))
{
Names += (string.IsNullOrEmpty(Names) ? "" : ",") + c.ColumnName;
if (IsType(c.DataType, "System.Nullable`1[System.Int16]") ||
IsType(c.DataType, "System.Nullable`1[System.Int32]") ||
IsType(c.DataType, "System.Nullable`1[System.Int64]") ||
IsType(c.DataType, "System.Nullable`1[System.Double]") ||
IsType(c.DataType, "System.Nullable`1[System.Decimal]") ||
c.DataType == typeof(System.Int16) ||
c.DataType == typeof(System.Int32) ||
c.DataType == typeof(System.Int64) ||
c.DataType == typeof(System.Double) ||
c.DataType == typeof(System.Decimal))
{
values += (string.IsNullOrEmpty(values) ? "" : ",") + _dt.Rows[i][c.ColumnName].ToString();
} if (IsType(c.DataType, "System.Nullable`1[System.DateTime]") ||
c.DataType == typeof(System.DateTime))
{
values += (string.IsNullOrEmpty(values) ? "" : ",") + "DateTime('" + _dt.Rows[i][c.ColumnName].ToString() + "')";
}
if (IsType(c.DataType, "System.String") || c.DataType == typeof(System.String))
{
values += (string.IsNullOrEmpty(values) ? "" : ",") + "'" + _dt.Rows[i][c.ColumnName].ToString() + "'";
}
}
}
if (!string.IsNullOrEmpty(Names) && !string.IsNullOrEmpty(values))
{
sqlstring = string.Format(sqlString, Names, values);
_List.Add(sqlstring);
}
}
dbhelper.ExecuteSqlTran(_List);
}
catch (Exception ex)
{
throw ex;
}
finally
{
_List = null;
}
}
#endregion #region 比较两个datatable,值不一样的相应的修改下载处理
public void CompareToDataTable(DataTable SourTable, DataTable TargetTable, string TableName)
{
string SelectString = string.Empty;
List<string> _list = new List<string>();
DataTable dtInsert = null;
DataTable drUpdate = null;
try
{
dtInsert = SourTable.Clone();
drUpdate = SourTable.Clone();
foreach (DataRow dr in SourTable.Rows)
{
if (TableName == "t_sellworker")
{
SelectString = "serverpartcode='" + dr["serverpartcode"].ToString() + "' and sellworkercode='" + dr["sellworkercode"].ToString() + "'";
}
else if (TableName == "t_salespromote")
{
SelectString = "salespromote_id=" + dr["salespromote_id"].ToString() + "";
// SelectString = "salespromote_startdate='" + dr["salespromote_startdate"].ToString() + "' and salespromote_enddate='" + dr["salespromote_enddate"].ToString() + "' " +
// " and salespromote_type='" + dr["salespromote_type"].ToString() + "' and salespromote_name='" + dr["salespromote_name"].ToString() + "' and commodity_code='" + dr["commodity_code"].ToString() + "'";
}
else if (TableName == "t_commodityex")
{
SelectString = "commodity_code='" + dr["commodity_code"].ToString() + "' and commodity_barcode='" + dr["commodity_barcode"].ToString() + "' "; // and serverpartshop_id=" + dr["serverpartshop_id"].ToString() + "
}
DataRow[] dr2 = TargetTable.Select(SelectString);
if (dr2 != null && dr2.Length > )
{
bool flag = false;
foreach (DataRow dr3 in dr2)
{
foreach (DataColumn c in SourTable.Columns)
{
if (dr3[c.ColumnName] != null && dr[c.ColumnName] != null && dr3[c.ColumnName].ToString() != dr[c.ColumnName].ToString())
{
flag = true;
break;
}
}
}
if (flag)
{
drUpdate.Rows.Add(dr.ItemArray);
}
}
else
{
dtInsert.Rows.Add(dr.ItemArray); //添加数据行
}
} if (drUpdate != null && drUpdate.Rows.Count > )
{
if(TableName=="t_sellworker")
{
UpdateData(drUpdate, "t_sellworker", new string[] { "serverpartcode", "sellworkercode" }, TargetDb);
}
else if (TableName == "t_salespromote")
{
UpdateData(drUpdate, "t_salespromote", new string[] { "salespromote_startdate", "salespromote_enddate", "salespromote_type", "salespromote_name", "commodity_code"}, TargetDb);
}
else if (TableName == "t_commodityex")
{
UpdateData(drUpdate, "t_commodityex", new string[] { "serverpartcode", "commodity_barcode", "serverpartshop_id" }, TargetDb);
}
MessageBox.Show("更新成功!");
}
if (dtInsert != null && dtInsert.Rows.Count > )
{
DownDataInsert(dtInsert, TableName, TargetDb);//插入
MessageBox.Show("下载成功!");
} }
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
dtInsert = null;
drUpdate = null;
}
}
#endregion #region 下载时重构update语句(处理数据空的情况)
public void UpdateData(DataTable table, string TableName, string[] keys,DBHelper dbhelper)
{
List<string> _List = null;
Dictionary<string, string> keyList = null;
try
{
if (_List == null)
{
_List = new List<string>();
}
else
{
_List.Clear();
} if (table == null)
{
throw new Exception("行不可为空!");
}
if (string.IsNullOrEmpty(TableName))
{
throw new Exception("表名不可为空!");
}
for (int i = ; i < table.Rows.Count; i++)
{
if (keyList == null)
{
keyList = new Dictionary<string, string>();
}
else
{
keyList.Clear();
}
string sqlstring = string.Empty;
string sqlString = "Update " + TableName + " set {0} where {1}";
string values = string.Empty;
foreach (DataColumn c in table.Columns)
{
if (table.Rows[i][c.ColumnName] != null && !string.IsNullOrEmpty(table.Rows[i][c.ColumnName].ToString()))
{
if (IsType(c.DataType, "System.Nullable`1[System.Int16]") ||
IsType(c.DataType, "System.Nullable`1[System.Int32]") ||
IsType(c.DataType, "System.Nullable`1[System.Int64]") ||
IsType(c.DataType, "System.Nullable`1[System.Double]") ||
IsType(c.DataType, "System.Nullable`1[System.Decimal]") ||
c.DataType == typeof(System.Int16) ||
c.DataType == typeof(System.Int32) ||
c.DataType == typeof(System.Int64) ||
c.DataType == typeof(System.Double) ||
c.DataType == typeof(System.Decimal))
{
values += ((string.IsNullOrEmpty(values) ? "" : ",") + c.ColumnName + "=" + table.Rows[i][c.ColumnName].ToString());
if (keys.Contains(c.ColumnName.ToUpper()) || keys.Contains(c.ColumnName.ToLower()))
{
keyList.Add(c.ColumnName, table.Rows[i][c.ColumnName].ToString());
}
} if (IsType(c.DataType, "System.Nullable`1[System.DateTime]") ||
c.DataType == typeof(System.DateTime))
{
values += ((string.IsNullOrEmpty(values) ? "" : ",") + c.ColumnName + "=" + "DateTime('" + table.Rows[i][c.ColumnName].ToString() + "')");
if (keys.Contains(c.ColumnName.ToUpper()) || keys.Contains(c.ColumnName.ToLower()))
{
keyList.Add(c.ColumnName, "DateTime('" + table.Rows[i][c.ColumnName].ToString() + "')");
}
}
if (IsType(c.DataType, "System.String") || c.DataType == typeof(System.String))
{
values += (string.IsNullOrEmpty(values) ? "" : ",") + c.ColumnName + "=" + "'" + table.Rows[i][c.ColumnName].ToString() + "'";
if (keys.Contains(c.ColumnName.ToUpper()) || keys.Contains(c.ColumnName.ToLower()))
{
keyList.Add(c.ColumnName, "'" + table.Rows[i][c.ColumnName].ToString() + "'");
}
}
}
}
if (!string.IsNullOrEmpty(values) && keyList != null && keyList.Count == keys.Length)
{
string strKeys = string.Empty;
foreach (KeyValuePair<string, string> kvp in keyList)
{
strKeys += ((string.IsNullOrEmpty(strKeys) ? "" : " AND ") + kvp.Key + " = " + kvp.Value);
} if (!string.IsNullOrEmpty(strKeys))
{
sqlstring = string.Format(sqlString, values, strKeys);
_List.Add(sqlstring);
} }
}
dbhelper.ExecuteSqlTran(_List);
}
catch (Exception ex)
{
throw ex;
}
finally
{
_List = null;
keyList = null;
}
}
#endregion
#region 上传时重构目标数据表insert(数据中带null的处理)
public void InsertTableData(DataTable dt, string TableName, DBHelper dbhelper)
{
try
{
List<string> _List = new List<string>();
if (dt == null)
{
throw new Exception("datatable不可为空!");
}
if (string.IsNullOrEmpty(TableName))
{
throw new Exception("表名不可为空!");
} for (int i = ; i < dt.Rows.Count; i++)
{
string sqlstring = string.Empty;
string sqlString = "insert into " + TableName + " ({0}) VALUES ({1})";
string Names = string.Empty;
string values = string.Empty;
foreach (DataColumn c in dt.Columns)
{
if (dt.Rows[i][c.ColumnName] != null && !string.IsNullOrEmpty(dt.Rows[i][c.ColumnName].ToString()))
{
Names += (string.IsNullOrEmpty(Names) ? "" : ",") + c.ColumnName;
if (IsType(c.DataType, "System.Nullable`1[System.Int16]") ||
IsType(c.DataType, "System.Nullable`1[System.Int32]") ||
IsType(c.DataType, "System.Nullable`1[System.Int64]") ||
IsType(c.DataType, "System.Nullable`1[System.Double]") ||
IsType(c.DataType, "System.Nullable`1[System.Decimal]") ||
c.DataType == typeof(System.Int16) ||
c.DataType == typeof(System.Int32) ||
c.DataType == typeof(System.Int64) ||
c.DataType == typeof(System.Double) ||
c.DataType == typeof(System.Decimal))
{
values += (string.IsNullOrEmpty(values) ? "" : ",") + dt.Rows[i][c.ColumnName].ToString();
} if (IsType(c.DataType, "System.Nullable`1[System.DateTime]") ||
c.DataType == typeof(System.DateTime))
{
values += (string.IsNullOrEmpty(values) ? "" : ",") + "DateTime('" + dt.Rows[i][c.ColumnName].ToString() + "')";
}
if (IsType(c.DataType, "System.String") || c.DataType == typeof(System.String))
{
values += (string.IsNullOrEmpty(values) ? "" : ",") + "'" + dt.Rows[i][c.ColumnName].ToString() + "'";
}
}
}
if (!string.IsNullOrEmpty(Names) && !string.IsNullOrEmpty(values))
{
sqlstring = string.Format(sqlString, Names, values);
_List.Add(sqlstring);
}
}
dbhelper.ExecuteSqlTran(_List);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
DBHelper SourceDb = new DBHelper("192.168.11.197", "pos1101", "dba", "sql");//源数据库
DBHelper TargetDb = new DBHelper("127.0.0.1", "pos012", "dba", "sql"); //目标
public class DBHelper
{
#region 构造函数
public DBHelper(string ConnStr)
{
connstring = ConnStr;
} public DBHelper(string Host, string Server, string UserId, string Password)
{
connstring = "host=" + Host + ";server=" + Server + ";userid=" + UserId + ";password=" + Password + ";";
} public DBHelper()
{ }
#endregion #region 属性信息
private string connstring = null;
public string ConnStr
{
set
{
connstring = value;
}
get
{
return connstring;
}
}
#endregion public DataSet QueryOdbc(string SqlString)
{
using (SAConnection conn = new SAConnection(connstring))
{
SACommand cmd = new SACommand(SqlString, conn);
try
{
conn.Open();
SADataAdapter adp = new SADataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds);
conn.Close();
return ds;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
} /// <summary>
/// 保存数据
/// </summary>
/// <param name="SQLStringList"></param>
public void ExecuteSqlTran(List<string> SQLStringList)
{
using (SAConnection conn = new SAConnection(connstring))
{
conn.Open();
SACommand cmd = new SACommand
{
Connection = conn
};
SATransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
{
for (int i = ; i < SQLStringList.Count; i++)
{
string strsql = SQLStringList[i].ToString();
if (strsql.Trim().Length > )
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
}
tx.Commit();
}
catch (Exception ex)
{
tx.Rollback();
throw new Exception(ex.Message);
}
finally
{
conn.Close();
}
}
} /// <summary>
/// 保存数据
/// </summary>
/// <param name="SQLStringList"></param>
public void ExecuteSqlTran(string SQLString)
{
using (SAConnection conn = new SAConnection(connstring))
{
conn.Open();
SACommand cmd = new SACommand
{
Connection = conn
};
SATransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
{
if (SQLString.Trim().Length > )
{
cmd.CommandText = SQLString;
cmd.ExecuteNonQuery();
}
tx.Commit();
}
catch (Exception E)
{
tx.Rollback();
throw new Exception(E.Message);
}
finally
{
conn.Close();
}
}
} /// <summary>
/// 获取最大主键ID
/// </summary>
/// <param name="SqlString"></param>
/// <returns></returns>
public int OdbcGetMaxPKID(string SqlString)
{
using (SAConnection conn = new SAConnection(connstring))
{
SACommand cmd = new SACommand(SqlString, conn);
try
{
conn.Open();
int max_id = cmd.ExecuteScalar().ToString().Equals("") ? : int.Parse(cmd.ExecuteScalar().ToString());
conn.Close();
return max_id;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
} ///// <summary>
///// 测试连接
///// </summary>
//public static void TestConn()
//{
// using (SAConnection Conn = new SAConnection(connstring))
// {
// Conn.Open();
// SACommand cmd = new SACommand();
// cmd.Connection = Conn;
// Conn.Close();
// }
//}
}
dbhelper类
重构insert update 比较两个datatbale的更多相关文章
- PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
原文: PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...
- 《oracle每天一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战
转载自窃破天道 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也 ...
- 使用Merge Into 语句实现 Insert/Update
网址: http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html 动机: 想在Oracle中用一条SQL语句直接进行Insert ...
- Merge Into 语句代替Insert/Update在Oracle中的应用实战
动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录 ...
- Oracle Merge Into Insert/Update
出自:http://blog.csdn.net/yuzhic/article/details/1896878 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明 ...
- mysql数据恢复 insert\update\delete 工具MyFlash
一.简介MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具.该工具通过解析v4版本的binlog,完成回滚操作.相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易. 该 ...
- LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作
我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...
- 关于MyBatis mapper的insert, update, delete返回值
这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...
- mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干
1.mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干 2.一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性).Con ...
随机推荐
- Linux 部署项目经验总结
[通用命令] 1.创建文件夹 mkdir -p xxx 2.解压包 tar -zxvf xxxx.tar.gz 3.缩文件 tar zcvf 压缩包名称.tar.gz 要压缩的文件 4.动命令 ...
- mySQL主从复制实战
随着访问量的不断增加,单台MySQL数据库服务器压力不断增加,需要对MYSQL进行优化和架构改造,MYQSL优化如果不能明显改善压力情况,可以使用高可用.主从复制.读写分离来.拆分库.拆分表来进行优化 ...
- P4555 [国家集训队]最长双回文串(回文树)
题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同). 输入长度为 n 的串 S ,求 S 的最长双回文子串 T ,即可 ...
- Python学习笔记(1)--Windows基本环境搭建
1.安装Python 官网下载地址:https://www.python.org/downloads/ 下载完成后安装选择自定义安装,并勾选自动填写环境变量,如果是默认安装,还需要自己手动配置环境变量 ...
- 洛谷 P1443 马的遍历
P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...
- [Poi] Use Markdown as React Components by Adding a Webpack Loader to Poi
Poi ships with many webpack loaders included, but you may run into scenarios where you'll need to cu ...
- 零基础学python-3.3 标识符
1.标识符的组成 1)有数字.下划线.英文字母组成 2)第一个字符仅仅能是字母或者下划线 3)大写和小写敏感 标识符通常是变量名称.方法名.类名等 2.keyword python里面有一系列的关键字 ...
- 赵雅智_运用Bitmap和Canvas实现图片显示,缩小,旋转,水印
上一篇已经介绍了Android种Bitmap和Canvas的使用,以下我们来写一个详细实例 http://blog.csdn.net/zhaoyazhi2129/article/details/321 ...
- Android导航Tab栏实现
前言 android中滑动控件非常多,相信大部分同学接触的都是ListView这样的竖向滑动的控件,可是有时候我们也有横向滑动的需求,非常多应用眼下也做成了这个样子,以weiciyuan为例,例如以下 ...
- ios提交程序后出现的各种问题
提交了几次都被feedback.下面均为本人碰到过得问题.希望对大家解决提交问题有帮助 Number one:PLA 3.3.12 We found your app uses the iOS ...