예제 #1
0
 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);
 }
예제 #2
0
        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();
                }
            }
        }