[英]custom Object collection to SqlDataReader
我想避免在當前項目中使用大對象,而我希望上載數據集合以填充SQL Server表
我正在計划SqlBulkCopy(也可以是具有表值參數的Sproc,但這不是我當前問題的范圍)
因為該方法接受DataTable
或SqlDataReader
我想知道我是否可以做類似的事情:
public struct tblCarOb
{
public String Model;
public Int32 Year;
}
因為我更喜歡結構而不是類對象,所以它可能是一個類。
List<tblCarOb> tcoLst = new List<tblCarOb>(){ new tblCarObj(){ Model = "A", Year= 2010 }};
using (sqlConnection ...)
{
use Reader to read form tcoLst or tblCarOb[]
}
所以我可以避免使用更復雜的DataTable
問題是可以做到嗎?
更新
public struct tblCarOb
{
public String Model;
public Int32 Year;
}
EntityFrameWork
DataTable
那樣使用反射 目的是最大程度地減少開銷和性能損失。
提前致謝
我建議你這個代碼
using (IDataReader reader = tcoLst.GetDataReader())
using (SqlConnection conn = new SqlConnection(....))
using (SqlBulkCopy bcp = new SqlBulkCopy(conn))
{
conn.Open();
//-->>>>>>>define this value
bcp.DestinationTableName = "YourTableName";
string createTableSql = string.Empty;
createTableSql += string.Format("IF EXISTS(SELECT * FROM sys.tables t WHERE t.name = {0}) DROP TABLE {0};", bcp.DestinationTableName);
createTableSql += string.Format("CREATE TABLE dbo.{0};",bcp.DestinationTableName);
for (int column = 0; column < reader.FieldCount; column++)
{
if (column > 0)
{
createTableSql += ",";
}
createTableSql += "[" + reader.GetName(column) + "]" + " VARCHAR(MAX) NULL";
}
createTableSql += ");";
using (SqlCommand createTable = new SqlCommand(createTableSql, conn))
{
createTable.ExecuteNonQuery();
}
bcp.WriteToServer(reader);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.