重构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 ...
随机推荐
- 结合Vue 的滚动底部加载
项目手机端分页跳转不理想,自己做了一个滚动加载的一个Demo 核心Dom结构 <body> <div id="Content"> <div> & ...
- linux学习之高并发服务器篇(二)
高并发服务器 1.线程池并发服务器 两种模型: 预先创建阻塞于accept多线程,使用互斥锁上锁保护accept(减少了每次创建线程的开销) 预先创建多线程,由主线程调用accept 线程池 3.多路 ...
- CSU 1249 竞争性酶抑制剂和同工酶
1249: 竞争性酶抑制剂和同工酶 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 109 Solved: 49 Description 人体内很多化学 ...
- bootstrap结合google code prettify的问题
发现prettify不能显示行号,于是上网找了解决方法: 只使用prettify的js的文件,不使用css文件,另外添加这段css: .com { color: #93a1a1; } .lit { c ...
- KVM硬件辅助虚拟化之 EPT in Nested Virtualization
在嵌套虚拟环境(Nested Virtualization)下,执行在hypervisor上的Virtual Machine仍能够作为hypervisor去执行其他的Virutal Machine,而 ...
- 利用opencv源代码和vs编程序训练分类器haartraining.cpp
如需转载请注明本博网址:http://blog.csdn.net/ding977921830/article/details/47733363. 一 训练框架 训练人脸检測分类器须要三个步骤: (1 ...
- 负载均衡-lvs
常用的负载均衡技术比较DNS 轮询DNS本身的机制不再赘述,这里主要看一看基于DNS的负载均衡,其大致原理很清楚,DNS系统本身支持同一个域名映射到多个ip (A记录),例如 这样每次向DNS系统询问 ...
- 963B:Destruction of a Tree
You are given a tree (a graph with n vertices and n - 1 edges in which it's possible to reach any ve ...
- Coderfroces 864 E. Fire(01背包+路径标记)
E. Fire http://codeforces.com/problemset/problem/864/E Polycarp is in really serious trouble — his h ...
- Assembly.Load 详解(c#)
我们在使用C# 语言的Assembly.Load 来加载托管程序集并使用反射功能时,一般需要先通过Assembly.Load(), Assembly.LoadFrom() 等方法将目标托管程序集加载到 ...