簡體   English   中英

自定義對象集合到SqlDataReader

[英]custom Object collection to SqlDataReader

我想避免在當前項目中使用大對象,而我希望上載數據集合以填充SQL Server表

我正在計划SqlBulkCopy(也可以是具有表值參數的Sproc,但這不是我當前問題的范圍)

因為該方法接受DataTableSqlDataReader

我想知道我是否可以做類似的事情:

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
  • 就我而言,我不需要刪除/創建SQL Server表
  • 就我而言,我創建的C#表對象在SQL Server中具有對應的表
  • 我不喜歡像DataTable那樣使用反射
  • **添加另一個類來實現它是可以的,但是不要使用100K行的整個DLL,因為這樣做是為了最大程度地減少占用空間。

目的是最大程度地減少開銷和性能損失。

提前致謝

我建議你這個代碼

        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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM