如何将List<Person> personList
转换为DBDataReader
?
在下面给出的代码中,我试图批量插入personList
。我有大约50万条记录,方法WriteToServer
期望有一个DBDataReader,而我有一个List<Person>
。如何将List<Person>
转换为DBDataReader
using (SqlBulkCopy bc= new SqlBulkCopy(constr)) {
bc.DestinationTableName = "MyPersonTable";
try
{
bc.WriteToServer(personList);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}\
\
**Person Model**
public int personId {get;set;} // Primarykey
public string personName {get;set;}
public int personAge {get;set;}
public DateTime personCreatedDate {get;set;}
答案 0 :(得分:1)
您可以使用此代码,然后将其与SqlBulkCopy一起将所有数据插入数据库:
null
答案 1 :(得分:0)
这是创建表的通用方法。
还有另外一种方法,通过创建自IDataReader
继承的自定义类(如果您对此很感兴趣)来了解
无论如何,下面是一种方式。
public static DataTable MakeTable(this List<object> o)
{
var data = new DataTable();
var props = o.FirstOrDefault()?.GetType().GetProperties();
if (props == null)
return data;
forEach(var p in props){
DataColumn c = new DataColumn();
c.DataType = p.PropertyType;
c.ColumnName = p.Name;
// c.AutoIncrement = true; // if this is a primaryKey
data.Columns.Add(c);
}
forEach(var item in o){
var row = data.NewRow();
forEach(var p in props){
row[p.Name] = p.GetValue(item);
}
data.Rows.Add(row);
}
return data;
}
// now all you need is to call MakeTable
using (SqlBulkCopy bc= new SqlBulkCopy(constr)) {
bc.DestinationTableName = "MyPersonTable";
try
{
bc.WriteToServer(personList.MakeTable());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}