• SqlBulkCopy 批量增加到数据库


    Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。 SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。 还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。

    使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。 但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。

    当把 SqlDateTime 类型的 DataTable 列批量加载到类型为 SQL Server 2008 中新增的日期/时间类型的 SQL Server 列时,SqlBulkCopy 将失败。

    public static VendorItemLastCostList BatchAddVendorItemLastCost(VendorItemLastCostList request)

            {

                if (request != null && request.VendorItemLastCostLists != null)

                {

                    DateTime dt = DateTime.Now;

                    DataTable table = new DataTable();

             

                    table.TableName = "VendorItemLastCostForUpload";

                   // table.Columns.Add(new DataColumn("TransactionNumber", typeof(Int32)));

             

                    table.Columns.Add(new DataColumn("VendorNumber", typeof(String)));

              

                    table.Columns.Add(new DataColumn("ItemNumber", typeof(String)));

             

                    table.Columns.Add(new DataColumn("CurrencyCode", typeof(String)));

            

                    table.Columns.Add(new DataColumn("LastCost", typeof(Decimal)));

          

                    table.Columns.Add(new DataColumn("InUser", typeof(String)));

            

                    table.Columns.Add(new DataColumn("Indate", typeof(DateTime)));

              

                   foreach (var item in request.VendorItemLastCostLists)

                      {

                          DataRow dr=  table.NewRow();

                   

                          dr["VendorNumber"] = item.VendorNumber;

                          dr["ItemNumber"] = item.ItemNumber;

                          dr["CurrencyCode"] = item.CurrencyCode;

                          dr["LastCost"] = item.LastCost;

                          dr["InUser"] = item.LoginName;

                          dr["Indate"] = dt.ToString("yyyy-MM-dd HH:mm:ss") ;

                          table.Rows.Add(dr);

                     }

              

                    string conn = @"";

                    //使用SqlBulkCopyOptions.UseInternalTransaction是指迁移动作指定在一个Transaction当中,如果数据迁移中产生错误或异常将发生回滚。

                    using (SqlBulkCopy bcp=new SqlBulkCopy(conn,SqlBulkCopyOptions.UseInternalTransaction))

                    {

                        try

                        {

                            //DB TableName

                            bcp.DestinationTableName = "VendorItemLastCostForUpload";

                            bcp.BulkCopyTimeout = 120;

                            //Memeory DataTable ColumnName mapping DB table column name

                            bcp.ColumnMappings.Add("VendorNumber", "VendorNumber");

                            bcp.ColumnMappings.Add("ItemNumber", "ItemNumber");

                            bcp.ColumnMappings.Add("CurrencyCode", "CurrencyCode");

                            bcp.ColumnMappings.Add("LastCost", "LastCost");

                            bcp.ColumnMappings.Add("InUser", "InUser");

                            bcp.ColumnMappings.Add("Indate", "Indate");

                            bcp.WriteToServer(table);

                            bcp.Close();

                            request.IsSuccess = true;

                        }

                        catch (Exception ex)

                        {

                            Logger.WriteErrorLog(ex.Message);

                        }

                        finally

                        {

                            request.InDate = dt.ToString("yyyy-MM-dd HH:mm:ss");

                        }

                    }

                }

                return request;

            }

  • 相关阅读:
    猫与路由器(还没看)
    ORA-12154: TNS: 无法解析指定的连接标识符(未解决)
    easy-batch demo
    mongodb 创建用户
    docker mongodb
    监听器,过滤器,拦截器
    mysql docker-compose启动异常:Database is uninitialized and password option is not specified
    设计模式-builder模式的价值
    【C++ Template | 04】折叠表达式
    【vim】vim插件教程
  • 原文地址:https://www.cnblogs.com/jiebian/p/3069381.html
Copyright © 2020-2023  润新知