• 利用SqlBuikCopy实现数据批量写入


    利用SqlBuikCopy实现不同数据库的同步

    1,地区同步

    View Code
     1  protected void btnSynchArea_Click(object sender, EventArgs e)
    2 {
    3 string strSql = "select [ID] ,[AreaId],[QuotationType],[GoodsTypeId],[ParentId] from MD_Area;select [ID],[CnName],[EnName],[AreaCode] ,[Discription] ,[ParentId] ,[IsDelete] ,[ShowOrder] ,[LastModifyBy] ,[LastModifyDate] from MD_AreaInfo";
    4 using (DataSet ds = Query(strSql))
    5 {
    6 if (ds == null) return;
    7 if (ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0 || ds.Tables.Count < 2) return;
    8 if (ds.Tables[1] == null || ds.Tables[1].Rows.Count == 0) return;
    9 SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(connectionString2);
    10 sb.MultipleActiveResultSets = true;
    11 using (SqlConnection conn = new SqlConnection(sb.ConnectionString))
    12 {
    13 conn.Open();
    14 using (SqlTransaction tran = conn.BeginTransaction())
    15 {
    16 int rowsAffect;
    17 using (SqlCommand cmd = conn.CreateCommand())
    18 {
    19 cmd.Transaction = tran;
    20 cmd.CommandText = "DELETE FROM MD_Area;DELETE FROM MD_AreaInfo";
    21 rowsAffect = cmd.ExecuteNonQuery();
    22 }
    23 SqlBulkCopy blkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, tran);
    24 blkCopy.ColumnMappings.Clear();
    25 blkCopy.DestinationTableName = "MD_Area";
    26 foreach (DataColumn dc in ds.Tables[0].Columns)
    27 {
    28 blkCopy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
    29 }
    30 try
    31 {
    32 blkCopy.WriteToServer(ds.Tables[0]);
    33 }
    34 catch
    35 {
    36 throw;
    37 }
    38 blkCopy.ColumnMappings.Clear();
    39 blkCopy.DestinationTableName = "MD_AreaInfo";
    40 foreach (DataColumn dc in ds.Tables[1].Columns)
    41 {
    42 blkCopy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
    43 }
    44 try
    45 {
    46 blkCopy.WriteToServer(ds.Tables[1]);
    47 }
    48 catch
    49 {
    50 throw;
    51 }
    52 tran.Commit();
    53 }
    54 }
    55 return;
    56 }
    57 }

    2,交易品类型同步

    View Code
     1 protected void btnSynchGoodsType_Click(object sender, EventArgs e)
    2 {
    3 string sql = "select [ID],[TypeID] ,[PropertyIndex] ,[DisplayName] ,[ShowOrder] from MD_GoodsMapping;" +
    4 "select [ID],[GoodsTypeCnName] ,[GoodsTypeEnName] ,[ShowOrder] ,[CreateBy] ,[CreateTime],[LastModifyBy] ,[LastModifyTime] ,[IsDeleted] from MD_GoodsType;" +
    5 "select [ID],[GoodsTypeID] ,[GroupID] from MD_GroupMapping";
    6 using (DataSet ds = Query(sql))
    7 {
    8 if (ds == null) return;
    9 if (ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0 || ds.Tables.Count < 3) return;
    10 if (ds.Tables[1] == null || ds.Tables[1].Rows.Count == 0) return;
    11 if (ds.Tables[2] == null || ds.Tables[2].Rows.Count == 0) return;
    12 SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(connectionString2);
    13 sb.MultipleActiveResultSets = true;
    14 using (SqlConnection conn = new SqlConnection(sb.ConnectionString))
    15 {
    16 conn.Open();
    17 using (SqlTransaction tran = conn.BeginTransaction())
    18 {
    19 int rowsAffect;
    20 using (SqlCommand cmd = conn.CreateCommand())
    21 {
    22 cmd.Transaction = tran;
    23 cmd.CommandText = "DELETE FROM MD_GoodsMapping;DELETE FROM MD_GoodsType;DELETE FROM MD_GroupMapping;";
    24 rowsAffect = cmd.ExecuteNonQuery();
    25 }
    26 SqlBulkCopy blkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, tran);
    27 blkCopy.ColumnMappings.Clear();
    28 blkCopy.DestinationTableName = "MD_GoodsMapping";
    29 blkCopy.ColumnMappings.Add("ID", "ID");
    30 blkCopy.ColumnMappings.Add("TypeID", "TypeID");
    31 blkCopy.ColumnMappings.Add("PropertyIndex", "PropertyIndex");
    32 blkCopy.ColumnMappings.Add("DisplayName", "DisplayName");
    33 blkCopy.ColumnMappings.Add("ShowOrder", "ShowOrder");
    34 try
    35 {
    36 blkCopy.WriteToServer(ds.Tables[0]);
    37 }
    38 catch
    39 {
    40
    41 throw;
    42 }
    43 blkCopy.ColumnMappings.Clear();
    44 blkCopy.DestinationTableName = "MD_GoodsType";
    45 foreach (DataColumn dc in ds.Tables[1].Columns)
    46 {
    47 blkCopy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
    48 }
    49 try
    50 {
    51 blkCopy.WriteToServer(ds.Tables[1]);
    52 }
    53 catch
    54 {
    55
    56 throw;
    57 }
    58 blkCopy.ColumnMappings.Clear();
    59 blkCopy.DestinationTableName = "MD_GroupMapping";
    60 foreach (DataColumn dc in ds.Tables[2].Columns)
    61 {
    62 blkCopy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
    63 }
    64 try
    65 {
    66 blkCopy.WriteToServer(ds.Tables[2]);
    67 }
    68 catch
    69 {
    70
    71 throw;
    72 }
    73 tran.Commit();
    74 }
    75 }
    76 return;
    77 }
    78 }

    3,交易品同步

    View Code
      1   protected void btnSynchGoods_Click(object sender, EventArgs e)
    2 {
    3 string sql = "select [ID],[TypeID] ,[PropertyIndex] ,[DisplayName] ,[ShowOrder] from MD_GoodsMapping;" +
    4 "select [ID],[GoodsTypeCnName] ,[GoodsTypeEnName] ,[ShowOrder] ,[CreateBy] ,[CreateTime],[LastModifyBy] ,[LastModifyTime] ,[IsDeleted] from MD_GoodsType;" +
    5 "select [ID],[GoodsTypeID] ,[GroupID] from MD_GroupMapping;" +
    6 "select [ID],[CnName],[EnName],[ClassCode],[ClassName],[Code],[property0],[property1],[property2],[property3],[property4],[property5],[property6],[property7],[property8],[property9],[Typeid],[isdelete],[istrade],[createby],[createdate],[lastmodifiedby],[lastmodifieddate],[showOrder] from MD_Goods;";
    7 using (DataSet ds = Query(sql))
    8 {
    9 if (ds == null) return;
    10 if (ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0 || ds.Tables.Count < 4) return;
    11 if (ds.Tables[1] == null || ds.Tables[1].Rows.Count == 0) return;
    12 if (ds.Tables[2] == null || ds.Tables[2].Rows.Count == 0) return;
    13 if (ds.Tables[3] == null || ds.Tables[3].Rows.Count == 0) return;
    14 SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(connectionString2);
    15 sb.MultipleActiveResultSets = true;
    16 using (SqlConnection conn = new SqlConnection(sb.ConnectionString))
    17 {
    18 conn.Open();
    19 using (SqlTransaction tran = conn.BeginTransaction())
    20 {
    21 int rowsAffect;
    22 using (SqlCommand cmd = conn.CreateCommand())
    23 {
    24 cmd.Transaction = tran;
    25 cmd.CommandText = "DELETE FROM MD_GoodsMapping;DELETE FROM MD_GoodsType;DELETE FROM MD_GroupMapping;DELETE FROM Quotation_TradeGoods;";
    26 rowsAffect = cmd.ExecuteNonQuery();
    27 }
    28 SqlBulkCopy blkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, tran);
    29 blkCopy.ColumnMappings.Clear();
    30 blkCopy.DestinationTableName = "MD_GoodsMapping";
    31 blkCopy.ColumnMappings.Add("ID", "ID");
    32 blkCopy.ColumnMappings.Add("TypeID", "TypeID");
    33 blkCopy.ColumnMappings.Add("PropertyIndex", "PropertyIndex");
    34 blkCopy.ColumnMappings.Add("DisplayName", "DisplayName");
    35 blkCopy.ColumnMappings.Add("ShowOrder", "ShowOrder");
    36 try
    37 {
    38 blkCopy.WriteToServer(ds.Tables[0]);
    39 }
    40 catch
    41 {
    42
    43 throw;
    44 }
    45 blkCopy.ColumnMappings.Clear();
    46 blkCopy.DestinationTableName = "MD_GoodsType";
    47 foreach (DataColumn dc in ds.Tables[1].Columns)
    48 {
    49 blkCopy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
    50 }
    51 try
    52 {
    53 blkCopy.WriteToServer(ds.Tables[1]);
    54 }
    55 catch
    56 {
    57
    58 throw;
    59 }
    60
    61 blkCopy.ColumnMappings.Clear();
    62 blkCopy.DestinationTableName = "MD_GroupMapping";
    63 foreach (DataColumn dc in ds.Tables[2].Columns)
    64 {
    65 blkCopy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
    66 }
    67 try
    68 {
    69 blkCopy.WriteToServer(ds.Tables[2]);
    70 }
    71 catch
    72 {
    73
    74 throw;
    75 }
    76 blkCopy.ColumnMappings.Clear();
    77 blkCopy.DestinationTableName = "Quotation_TradeGoods";
    78 blkCopy.ColumnMappings.Add("ID", "TradeGoodsID");
    79 blkCopy.ColumnMappings.Add("Typeid", "typeId");
    80 blkCopy.ColumnMappings.Add("CnName", "GoodsChineseName");
    81 blkCopy.ColumnMappings.Add("EnName", "GoodsEnglishName");
    82 blkCopy.ColumnMappings.Add("property0", "property0");
    83 blkCopy.ColumnMappings.Add("property1", "property1");
    84 blkCopy.ColumnMappings.Add("property2", "property2");
    85 blkCopy.ColumnMappings.Add("property3", "property3");
    86 blkCopy.ColumnMappings.Add("property4", "property4");
    87 blkCopy.ColumnMappings.Add("property5", "property5");
    88 blkCopy.ColumnMappings.Add("property6", "property6");
    89 blkCopy.ColumnMappings.Add("property7", "property7");
    90 blkCopy.ColumnMappings.Add("property8", "property8");
    91 blkCopy.ColumnMappings.Add("property9", "property9");
    92 blkCopy.ColumnMappings.Add("ShowOrder", "ShowOrder");
    93 blkCopy.ColumnMappings.Add("isdelete", "IsEnable");
    94 try
    95 {
    96 blkCopy.WriteToServer(ds.Tables[3]);
    97 }
    98 catch
    99 {
    100 throw;
    101 }
    102 tran.Commit();
    103 }
    104
    105 }
    106 }
    107 }
    108 }

    为了提高性能,在链接字符串中引入MultipleActiveResultSets属性为true,目的是使用多活动结果集与关联的连接相关联
    对于SqlBuikCopy注意,ColumnMappings,DestinationTableName两个属性,第一个表示数据源中列与目标列的之间的关系;第二个 目标表的名称
    -------

    4,两个新闻表同步

    View Code
     1 string strSql = "SELECT * FROM RSS";
     2             string strDelete = "DELETE FROM NEWRSS  where link in (select link from Rss )";
     3             using (SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=DEMO;Persist Security Info=True;User ID=sa;PassWord=pass@word1"))
     4             {
     5                 con.Open();
     6                 using (SqlTransaction tran = con.BeginTransaction())
     7                 {
     8                     try
     9                     {
    10                         SqlCommand cmd = con.CreateCommand();
    11                         cmd.Transaction = tran;
    12                         cmd.CommandText = strDelete;
    13                         cmd.ExecuteNonQuery();
    14                         cmd.CommandText = strSql;
    15                         DataSet ds = new DataSet();
    16                         SqlDataAdapter da = new SqlDataAdapter(cmd);
    17                         da.Fill(ds);
    18                         SqlBulkCopy blc = new SqlBulkCopy(con, SqlBulkCopyOptions.CheckConstraints, tran);
    19                         blc.DestinationTableName = "newRss";
    20                         SqlBulkCopyColumnMapping sccm = new SqlBulkCopyColumnMapping();
    21                         sccm.SourceColumn = "link";
    22                         sccm.DestinationColumn = "link";
    23                         blc.ColumnMappings.Add(sccm);
    24                         blc.ColumnMappings.Add("title", "title");
    25                         blc.ColumnMappings.Add("summary", "summary");
    26                         blc.ColumnMappings.Add("author", "author");
    27                         blc.ColumnMappings.Add("content", "content");
    28                         blc.ColumnMappings.Add("published", "published");
    29                         blc.WriteToServer(ds.Tables[0]);
    30                         tran.Commit();
    31                     }
    32                     catch (Exception ex)
    33                     {
    34                         tran.Rollback();
    35                     }
    36                 }
    37 
    38             }

    OracleBuikCopy

    app/Administrator/product/11.2.0/client_1/ODACDoc/DocumentationLibrary/doc/win.112/e23174/OracleBulkCopyClass.htm

    OracleBuikCopy
     1 protected void btnOracle_Click(object sender, EventArgs e)
     2         {
     3             string strSelect = "SELECT * FROM SUPPLY_INFO";
     4             using (OracleConnection con = new OracleConnection("Data Source=localhost/orcl;User ID=simmspstest;PassWord=simmspstest"))
     5             {
     6                 con.Open();
     7                 OracleCommand cmd = con.CreateCommand();
     8                 cmd.CommandText = strSelect;
     9                 OracleDataAdapter da = new OracleDataAdapter(cmd);
    10                 DataSet ds = new DataSet();
    11                 da.Fill(ds);
    12                 OracleBulkCopy obc = new OracleBulkCopy(con);
    13                 obc.DestinationTableName = "newsupplyInfo";
    14                 obc.ColumnMappings.Add("ID", "ID");
    15                 obc.ColumnMappings.Add("SUPPLYNAME", "SUPPLYNAME");
    16                 obc.ColumnMappings.Add("ADDRESS", "ADDRESS");
    17                 obc.ColumnMappings.Add("CONTACTTEL", "CONTACTTEL");
    18                 obc.WriteToServer(ds.Tables[0]);
    19             }
    20         }
  • 相关阅读:
    IoC~MVC3+EF+Autofac实现松耦合的系统架构 [转载]
    Ioc容器Autofac系列 向导
    依赖注入框架Autofac的简单使用 转载
    学 Win32 汇编[30] 条件及循环伪指令: .IF、.WHILE、.REPEAT 等
    学 Win32 汇编[31] 结构与联合
    在 API 函数中使用 PChar 参数的几种方法
    关于 "高位" 与 "低位" 回复 "Lovemit" 的问题
    如何把类中的方法做参数 回复 "林Lin☆☆" 的问题
    一个拼图工具的制作思路 回复 "AlwaysBug" 的问题
    简单的 "双缓冲" 绘图的例子 回复 "TookiQ" 的问题
  • 原文地址:https://www.cnblogs.com/hfliyi/p/2335116.html
Copyright © 2020-2023  润新知