【发布时间】:2014-01-05 07:29:27
【问题描述】:
为了在数据库中插入大量数据,我曾经将所有插入信息收集到一个列表中,并将此列表转换为DataTable。然后我通过SqlBulkCopy将该列表插入数据库。
我将生成的列表发送到哪里LiMyList
,其中包含我要插入数据库的所有批量数据的信息
并将其传递给我的批量插入操作
InsertData(LiMyList, "MyTable");
InsertData 在哪里
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;
}
现在我想做一个更新操作,有什么方法可以通过SqlBulkCopy 将数据从 C#.Net 更新到数据库
【问题讨论】:
-
为史诗般的术语“更新”+1
-
不确定我是否明白您要存档的意思...如果您的问题是关于快速替换整个表格内容,我会选择
truncate(technet.microsoft.com/en-us/library/ms177570.aspx) 并批量插入新的数据部分。但是这种方法仅在您没有外键约束的情况下才有效。如果你想要真正的更新而不是寻找answer from Guillermo Gutiérrez。 -
我会建议使用表值参数,这两者都可以。
-
@dormisher 更新是印度常用的一个术语:english.stackexchange.com/questions/68169/…
-
我的印度同事确认了这个词...@EvertonAgner
标签: c# .net sql-server bulk