首先创建一个数据库连接类:SQLHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace insetData
{
   public  class SQLHelper
    {
       public static readonly string Strconn = "Data Source=LocalHost;database=CardID;uid=sa;pwd=123";

        /// <summary>

        /// 创建SqlConnection对象

        /// </summary>

        /// <returns></returns>

        public static SqlConnection sqlConn()
        {

            return new SqlConnection(Strconn);

        }

        /// <summary>
        /// SQLServer批量插入数据功能
        /// 这是SQLServer特有的功能,故不再上层抽象类中编写
        /// </summary>
        /// <param name="dt">数据表</param>

        /// <param name="tableName">表名称</param>

        public static void BulkInsert(SqlConnection conn, DataTable dt, string tableName)
        {

            if (string.IsNullOrEmpty(tableName))
            {

                throw new ArgumentNullException("请指定需要插入的数据表");

            }

            var count = dt.Rows.Count;

            if (count == 0)
            {

                return;

            }

            if (conn.State == ConnectionState.Closed)
            {

                conn.Open();

            }

            //SqlBulkCopy用其他源的数据有效批量加载 SQL Server 表

            using (SqlBulkCopy copy = new SqlBulkCopy(conn))
            {

                copy.BatchSize = dt.Rows.Count;//每一批次中的行数。在每一批次结束时,将该批次中的行发送到服务器。 

                copy.DestinationTableName = tableName;//指定目标表

                copy.WriteToServer(dt);//将dt中的所有行复制到SqlBulkCopy对象的DestinationTableName指定的目标表中

                conn.Close();
                conn.Dispose();

            }

        }

        /// <summary>
        /// 创建数据表
        /// </summary>
        /// <param name="columns"></param>

        public static DataTable CreateTable(IList<string> columns)
        {
            var dt = new DataTable();
            foreach (var c in columns)
            {
                dt.Columns.Add(c);
            }

            return dt;

        }
        /// <summary>
        /// 批量插入数据
        /// </summary>
        /// <param name="tableName">数据表</param>
        /// <param name="columns">字段</param>
        /// <param name="dataList">数据列表</param>
        /// <param name="action">具体操作</param>

        public static void CreateInner<T>(SqlConnection conn, string tableName, IList<string> columns, IList<T> dataList, Action<DataRowWaper, T, int> action)
        {
            if (string.IsNullOrEmpty(tableName))
            {
               throw new ArgumentNullException("需要指定操作的数据表");
            }

            if (columns == null || columns.Count == 0)
            {
                throw new ArgumentNullException("数据表列不能为空");
            }

            var dt = CreateTable(columns);

            if (action != null)
            {
                for (var i = 0; i < dataList.Count; i++)
                {
                    var wapper = new DataRowWaper(dt.NewRow());
                    action(wapper, dataList[i], i);
                    dt.Rows.Add(wapper.Row);

                }
            }

            BulkInsert(conn, dt, tableName);

        }
    }
}
View Code

相关文章: