[英]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()
函數使用ColumnName
和DataType
初始化表列,但它也更深入地查看數據庫,並添加了一些約束,如AllowDBNull
、 AutoIncrement
、 MaxLength
等。
但是,這會導致我的應用程序出現問題,因為我想在內部進一步處理數據。
那么,是否可以僅通過設置最基本的屬性(直接來自select
語句)而不設置AllowDBNull
、 MaxLength
來執行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
,則還會創建適當的主鍵和約束。
我已經對其進行了測試,它只是加載列名和類型,所有其他屬性(如AllowDbNull
或MaxLength
都有其默認值,這些值可能是對的,也可能是錯的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.