/*_____________________ List<T>類型數據 To Sql_______________________________*/
/// <summary>
/// Sqlbulkcopies the specified SMS.批量插入到數據庫
/// </summary>
/// <param name="data">list類型數據.</param>
/// <param name="sqlconn">數據庫連接字符串.</param>
private void Sqlbulkcopy(List<T> data, SqlConnection sqlconn)
{
#region 待處理數據初始化處理
List<PropertyInfo> pList = new List<PropertyInfo>();//創建屬性的集合
DataTable dt = new DataTable();
//把所有的public屬性加入到集合 並添加DataTable的列
Array.ForEach<PropertyInfo>(typeof(T).GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); }); //獲得反射的入口(typeof()) //要對 array 的每個元素執行的 System.Action。
foreach (var item in data)
{
DataRow row = dt.NewRow(); //創建一個DataRow實例
pList.ForEach(p => row[p.Name] = p.GetValue(item, null)); //給row 賦值
dt.Rows.Add(row); //加入到DataTable
}
#endregion
#region 批量插入數據庫 SqlBulkCopy聲明及參數設置
SqlBulkCopy bulk = new SqlBulkCopy(sqlconn.ToString(), SqlBulkCopyOptions.UseInternalTransaction) { DestinationTableName = "TableName" /*設置數據庫目標表名稱*/, BatchSize = dt.Rows.Count /*每一批次中的行數*/ };
bulk.ColumnMappings.Add("ID", "ID"); //設置數據源中的列和目標表中的列之間的映射關系
bulk.ColumnMappings.Add("name", "name");//ColumnMappings.Add("源數據表列名稱", "目標表數據列名稱");
bulk.ColumnMappings.Add("sex", "sex");
bulk.ColumnMappings.Add("phone", "phone");
.
.
.
#endregion
bulk.WriteToServer(dt);
if (bulk != null)
{
bulk.Close();
}
}
/*_____________________ DataTable類型數據 To Sql_______________________________*/
/// <summary>
/// Sqlbulkcopies the specified SMS.批量插入到數據庫
/// </summary>
/// <param name="dt">DataTable類型帶插入數據</param>
/// <param name="sqlconn">數據庫連接字符串</param>
private void Sqlbulkcopy(DataTable dt, SqlConnection sqlconn)
{
#region 批量插入數據庫 SqlBulkCopy聲明及參數設置
SqlBulkCopy bulk = new SqlBulkCopy(sqlconn.ToString(), SqlBulkCopyOptions.UseInternalTransaction) { DestinationTableName = "ENG_FailSendSMS" /*設置數據庫目標表名稱*/, BatchSize = dt.Rows.Count /*每一批次中的行數*/ };
bulk.ColumnMappings.Add("ID", "ID"); //設置數據源中的列和目標表中的列之間的映射關系
bulk.ColumnMappings.Add("name", "name");//ColumnMappings.Add("源數據表列名稱", "目標表數據列名稱");
bulk.ColumnMappings.Add("sex", "sex");
bulk.ColumnMappings.Add("phone", "phone");
.
.
.
#endregion
bulk.WriteToServer(dt);
if (bulk != null)
{
bulk.Close();
}
}
補充:SqlBulkCopy ColumnMappings 映射列名是敏感大小寫的!
