For inserting a huge amount of data in a database, I used to collect all the inserting information into a list and convert this list into a DataTable
. I then insert that list to a database via SqlBulkCopy
.
Where I send my generated list LiMyList
which contain information of all bulk data which I want to insert to database
and pass it to my bulk insertion operation
InsertData(LiMyList, "MyTable");
Where InsertData
is
public static void InsertData<T>(List<T> list,string TableName)
{
DataTable dt = new DataTable("MyTable");
clsBulkOperation blk = new clsBulkOperation();
dt = ConvertToDataTable(list);
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["SchoolSoulDataEntitiesForReport"].ConnectionString))
{
bulkcopy.BulkCopyTimeout = 660;
bulkcopy.DestinationTableName = TableName;
bulkcopy.WriteToServer(dt);
}
}
public static DataTable ConvertToDataTable<T>(IList<T> data)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}
Now I want to do an update operation, is there any way as for inserting data is done by SqlBulkCopy
for Updating data to DataBase From C#.Net
truncate
(technet.microsoft.com/en-us/library/ms177570.aspx) and bulk insert of a new portion of data. But this approach will only work in case you have no foreign key constraints. If you want to real update than look for the answer from Guillermo Gutiérrez.