使用DataTable.Load()而不创建所有列属性

时间:2015-06-29 14:26:12

标签: c# .net sql-server

我正在从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初始化表列,但它也会更深入地查看数据库,并添加了一些约束,例如AllowDBNull,{{ 1}},AutoIncrement

但是,这会导致我的应用程序出现问题,因为我希望在内部进一步处理数据。

那么,是否可以通过设置最基本的属性(直接来自MaxLength语句)来执行Load(),而无需设置selectAllowDBNull , 等等?或者我需要在MaxLength之后清除这些值吗?或者是否有另一种方法可以调用Load()

1 个答案:

答案 0 :(得分:2)

如果您不希望这种行为,请使用DataTable.LoadDbDataAdapter.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,适当的主键和   也创造了约束。

我测试了它,它只是加载列名和类型,所有其他属性(如AllowDbNullMaxLength)都有默认值,可能是对还是错。