簡體   English   中英

使用 DataTable.Load() 而不創建所有列屬性

[英]Use DataTable.Load() without creating all column properties

我正在從這樣的 SQL 服務器數據庫加載數據:

SqlCommand cmd = new SqlCommand("select * from x", conn);
cmd.CommandType = CommandType.Text;
DataTable dt = new DataTable();
SqlDataReader rd = cmd.ExecuteReader();
dt.Load(rd, LoadOption.PreserveChanges); 

問題:

Load()函數使用ColumnNameDataType初始化表列,但它也更深入地查看數據庫,並添加了一些約束,如AllowDBNullAutoIncrementMaxLength等。

但是,這會導致我的應用程序出現問題,因為我想在內部進一步處理數據。

那么,是否可以僅通過設置最基本的屬性(直接來自select語句)而不設置AllowDBNullMaxLength來執行Load() 或者我需要在Load()之后清除這些值嗎? 或者還有其他替代方法來調用Load()嗎?

如果您不希望這種行為,請不要使用DataTable.Load而是DbDataAdapter.Fill(DataTable)

DataTable dt = new DataTable();
using(var da = new SqlDataAdapter("select * from x", conn))
    da.Fill(dt);

然后Fill操作將行添加到DataSet中的目標DataTable對象,如果DataTable對象尚不存在,則創建它們。 創建DataTable對象時, Fill操作通常只創建列名 metadata 但是,如果MissingSchemaAction屬性設置為AddWithKey ,則還會創建適當的主鍵和約束。

我已經對其進行了測試,它只是加載列名和類型,所有其他屬性(如AllowDbNullMaxLength都有其默認值,這些值可能是對的,也可能是錯的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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