我有一个来自SQL请求的数据表。虽然我真的在使用OLEDB对着一个表,但即使我从我的SQL服务器获取表,我也有同样的问题。
如果我填充数据表然后查询DataColumns - 他们都说AllowDBNull == true和allowNull == true。但是,如果我查看SSMS中的表格,它会另有说明。
string selectStmt= "Select * from foobar; "
DataSet NewData = new DataSet();
using (SqlConnection DataConn = new SqlConnection(MyConnectionString))
{
SqlDataAdapter DataAdapter = new SqlDataAdapter(selectStmt, DataConn );
var Results = DataAdapter.Fill(NewData, tableName);
}
DataColumn Col = NewData.Tables[0].Columns[0];
// Col.AllowDBNull is always true as is Col.AllowNull
我似乎也无法弄清楚在哪里获取字符串字段的长度。
这使我在尝试上传数据之前实现一些简单的客户端错误检查有点困难。
如果我只处理基于SQL Server的表,我可以使用Microsoft.SqlServer.Management.Sdk和Microsoft.SqlServer.Management.Smo。既然我不是,那就结束了。
答案 0 :(得分:2)
尝试
var Results = DataAdapter.FillSchema(NewData, SchemaType.Source, tableName);
看看是否能为您提供所需的架构详细信息。
答案 1 :(得分:1)
ResultSet不会像这样知道列模式数据,对于每个命令执行来说操作过于密集,而运行时只会使用它返回的数据动态创建模式信息。数据/结果集。对于完整的模式,您必须使用EF之类的东西或自己编码模式。对于运行时模式,唯一可以依赖的是数据类型(除非数据列是使用其属性专门编码的)。
要正确测试DbNull,请执行以下操作:
if ( dataRow[colNameOrIndex].Value == DbNull.Value){
//null
}