DataTable 批量插入SqlServer数据库 使用:SqlBulkCopy

xiaoxiao2021-02-28  85

示例:

string sql=""; dbhelper.ExecuteNonQuery(sql); DataTable dt = dbhelper.GetDataTable(sql); if (dt != null && dt.Rows.Count > 0) {     SqlBulkCopy bcp = new SqlBulkCopy("server=.;database=Service;uid=sa;pwd=123456");     bcp.DestinationTableName = "InventoryDiff";     bcp.WriteToServer(dt); }

简单使用:

     private void UpdateTitle(DataTable dt)         {             {                 using (SqlBulkCopy sbc = new SqlBulkCopy(SqlHelper.connectionString))                 {                     sbc.BatchSize = dt.Rows.Count;//每批次操作数量                     sbc.BulkCopyTimeout = ;//操作允许的超时时间 单位:秒 (超时则事务不提交)                     sbc.DestinationTableName = "TB_product_NewTitle";  //数据库对应表名                     sbc.WriteToServer(dt);                 }             }

        }

如果出现 DataTable中的字段和数据库的字段不对应的异常信息,需要手动的为DataTable的列 和 数据库中的列 绑定 注意:dataColumns的数据类型,一定要和数据库一样,不然各种报错 字段也区分大小写,一定要注意     /// <summary>         /// 批量更新数据到数据库(DataTable列结构保持和数据库表一致)         /// </summary>         /// <param name="dt"></param>         public static void BulkCopyData(Queue<QueueMessage> myQ, int SiteID,int max)         {             )             {                 using (SqlBulkCopy sbc = new SqlBulkCopy(SqlHelper.con))                 {                     QueueMessage qm = new QueueMessage();                     DataTable dt = new DataTable();                     dt.Columns.AddRange(               new DataColumn[] {               new DataColumn("Sender", typeof(Int32)),               new DataColumn("Receiver", typeof(Int32)),               new DataColumn("Content", typeof(string)),               new DataColumn("CreateTime", typeof(DateTime)),               new DataColumn("SenderType", typeof(int))             });                     ;                     )                         qcount = max;                     else                         qcount = myQ.Count();                     ; i < qcount; i++)                     {                         qm = myQ.Dequeue() as QueueMessage;                         DataRow dr = dt.NewRow();                         dr["Sender"] = qm.Sender;                         dr["Receiver"] = qm.Receiver;                         dr["Content"] = qm.Content;                         dr["CreateTime"] = qm.CreateTime;                         dr["SenderType"] = qm.SenderType;                         dt.Rows.Add(dr);                     }            //把DataTable的列名和数据库的列名绑定                     sbc.ColumnMappings.Add("Sender", "Sender");                     sbc.ColumnMappings.Add("Receiver", "Receiver");                     sbc.ColumnMappings.Add("Content", "Content");                     sbc.ColumnMappings.Add("CreateTime", "CreateTime");                     sbc.ColumnMappings.Add("SenderType", "SenderType");                     sbc.BatchSize = dt.Rows.Count;//每批次操作数量                     sbc.BulkCopyTimeout = ;//操作允许的超时时间 单位:秒 (超时则事务不提交)                     sbc.DestinationTableName = "TB_Message_" + SiteID;//数据库对应表名                     sbc.WriteToServer(dt);                 }             }         }

转载请注明原文地址: https://www.6miu.com/read-97122.html

最新回复(0)