C# 在不创建所有列属性的情况下使用DataTable.Load()

C# 在不创建所有列属性的情况下使用DataTable.Load(),c#,.net,sql-server,C#,.net,Sql Server,我正在从SQL server数据库加载数据,如下所示: 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()函数使

我正在从SQL server数据库加载数据,如下所示:

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()
,还有其他替代方法吗?

如果您不希望这种行为,请不要使用,但:

然后,
Fill
操作将行添加到目标
DataTable
对象 在
数据集中
,创建
数据表
对象(如果尚未创建) 存在。在创建
DataTable
对象时,正常执行
Fill
操作 仅创建列名元数据
。但是,如果
MissingSchemaAction
属性设置为
AddWithKey
,相应的主键和 还将创建约束


我已经测试过了,它只加载列名和类型,所有其他属性,如
AllowDbNull
MaxLength
都有它们的默认值,可能是对的,也可能是错的。

列表中加载数据,而不是
数据表
,@Habib这也是个好主意!哦,那很有趣。。。。我原以为DataAdapter做的更多。。。但这不是真的。。。事实上,它是有效的
MaxLength
为-1,依此类推。谢谢嗯,是的,我最近才发现一些问题,这就是为什么我不使用DataAdapter。它“太智能了”,因为如果将它用于视图(而不是表),那么它将为基础表而不是视图创建delete/update/insert命令。如果您使用的是只允许访问视图而不允许访问表的安全设置,那么这是不好的。但那是另一个故事。
DataTable dt = new DataTable();
using(var da = new SqlDataAdapter("select * from x", conn))
    da.Fill(dt);