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