我正在从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
,{{ 1}},AutoIncrement
等
但是,这会导致我的应用程序出现问题,因为我希望在内部进一步处理数据。
那么,是否可以通过设置最基本的属性(直接来自MaxLength
语句)来执行Load()
,而无需设置select
,AllowDBNull
, 等等?或者我需要在MaxLength
之后清除这些值吗?或者是否有另一种方法可以调用Load()
?
答案 0 :(得分:2)
如果您不希望这种行为,请使用DataTable.Load
,DbDataAdapter.Fill(DataTable)
:
DataTable dt = new DataTable();
using(var da = new SqlDataAdapter("select * from x", conn))
da.Fill(dt);
Fill
操作然后将行添加到目标DataTable
对象 在DataSet
中,创建DataTable
对象(如果尚未创建) 存在。在创建DataTable
个对象时,Fill
操作正常 仅创建列名元数据。但是,如果MissingSchemaAction
属性设置为AddWithKey
,适当的主键和 也创造了约束。
我测试了它,它只是加载列名和类型,所有其他属性(如AllowDbNull
或MaxLength
)都有默认值,可能是对还是错。