#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的更多相关文章

  1. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  2. 《oracle每天一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战

    转载自窃破天道 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也 ...

  3. 使用Merge Into 语句实现 Insert/Update

    网址: http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html 动机: 想在Oracle中用一条SQL语句直接进行Insert ...

  4. Merge Into 语句代替Insert/Update在Oracle中的应用实战

    动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录 ...

  5. Oracle Merge Into Insert/Update

    出自:http://blog.csdn.net/yuzhic/article/details/1896878 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明 ...

  6. mysql数据恢复 insert\update\delete 工具MyFlash

    一.简介MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具.该工具通过解析v4版本的binlog,完成回滚操作.相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易. 该 ...

  7. LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

    我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...

  8. 关于MyBatis mapper的insert, update, delete返回值

    这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...

  9. mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干

    1.mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干 2.一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性).Con ...

随机推荐

  1. js闭包实例展示

    准确来说,闭包是基于正常的垃圾回收处理机制下的.也就是说,一般情况一个函数(函数作用域)执行完毕,里面声明的变量会全部释放,被垃圾回收器回收.但闭包利用一个技巧,让作用域里面的变量,在函数执行完之后依 ...

  2. POJ 2826 An Easy Problem!(简单数论)

    Description Have you heard the fact "The base of every normal number system is 10" ? Of co ...

  3. vue2.0-transition多个元素

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. LSTM入门学习——结合《LSTM模型》文章看

    摘自:https://zybuluo.com/hanbingtao/note/581764 写得非常好 见原文 长短时记忆网络的思路比较简单.原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常 ...

  5. 版本控制Git(1)——理解暂存区

    一.svn和Git的比较 我们都知道传统的源代码管理都是以服务器为中心的,每个开发者都直接连在中间服务器上, 本地修改,然后commit到svn服务器上.这种做法看似完美,但是有致命的缺陷. 1. 开 ...

  6. Gallery滑动一页(一个Item)效果

    本文主要介绍如何使用Gallery只滑动一页以及其实现原理. Demo APK 可以方便的查看效果,在各大应用商店搜索 trinea android 下载即可,如:Google Play. 可运行代码 ...

  7. SQL中union union all 和in的查询效率问题

    UNION用的比较多union all是直接连接,取到得是所有值,记录可能有重复 union 是取唯一值,记录没有重复 1.UNION 的语法如下: [SQL 语句 1] UNION [SQL 语句 ...

  8. js数组中foEach和map的用法详解 jq中的$.each和$.map

    数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...

  9. ES6学习笔记(一)新的变量定义命令let和const

    1.一些历史 ES6(ECMAScript 6.0)是 JavaScript 语言的新一代标准,于2015 年 6 月正式发布,距今已经4年了,它的目标,是使得 JavaScript 语言可以用来编写 ...

  10. 关于【搭建LAMP环境时,php测试页面打不开】解决

    关于[搭建LAMP环境时,php测试页面打不开]解决 〇.我的测试页面是: http://172.30.124.10/index.php 用火狐打不开,如下图. 一.httpd已经启动了(system ...