private System.Data.DataTable CreateDataTableSchema(YzkSoftWare.DataModel.IDataModel moudle) { System.Data.DataTable dt = new System.Data.DataTable(moudle.Name); foreach (var field in moudle.Fields) { System.Data.DataColumn dc = new System.Data.DataColumn(field.Name, field.GetClrType()); dt.Columns.Add(dc); } return(dt); }
public override void BulkCopyData <D>(IEnumerable <D> data) { YzkSoftWare.DataModel.IDataModel model = typeof(D).GetDataModel(); using (DataTable dt = CreateDataTableSchema(model)) { int columcount = dt.Columns.Count; foreach (var d in data) { DataRow nr = dt.NewRow(); for (int i = 0; i < columcount; i++) { var col = dt.Columns[i]; object fieldvalue = model.Fields[col.ColumnName].GetModelFieldValue(d); nr[col.ColumnName] = fieldvalue; } dt.Rows.Add(nr); } System.Data.SqlClient.SqlBulkCopy bulkCopy = new System.Data.SqlClient.SqlBulkCopy(Connect as System.Data.SqlClient.SqlConnection); try { bulkCopy.DestinationTableName = model.Name; bulkCopy.BatchSize = dt.Rows.Count; if (Connect.State == ConnectionState.Closed) { Connect.Open(); } if (dt != null && dt.Rows.Count != 0) { bulkCopy.WriteToServer(dt); } } finally { bulkCopy.Close(); } } }