C# - 如何判断 DataColumn 是否支持空值?
C# - How to tell if DataColumn supports nulls?
我有一个来自 SQL 请求的数据 table。虽然我确实在使用 OLEDB 对抗 table,但即使我从我的 SQL 服务器获得 table,我也有同样的问题。
如果我填充数据table,然后查询 DataColumns - 他们都说 AllowDBNull== true 和 allowNull == true。但是,如果我查看 SSMS 中的 table,它会另有说明。
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 基于服务器的 table,我可以使用 Microsoft.SqlServer.Management.Sdk 和 Microsoft.SqlServer.Management.Smo。既然我不是,那就不行了。
ResultSet 不会像那样知道列架构数据,每次执行命令时执行该操作过于密集,相反,运行时将仅使用它返回的数据动态创建架构信息在 data/result-set。对于完整的架构,您必须使用 EF 之类的东西或自己编写架构代码。运行时模式唯一可以依赖的是数据类型(除非数据列是用它们的属性专门编码的)。
要正确测试 DbNull,请执行以下操作:
if ( dataRow[colNameOrIndex].Value == DbNull.Value){
//null
}
尝试
var Results = DataAdapter.FillSchema(NewData, SchemaType.Source, tableName);
看看这是否为您提供了所需的架构详细信息级别。
我有一个来自 SQL 请求的数据 table。虽然我确实在使用 OLEDB 对抗 table,但即使我从我的 SQL 服务器获得 table,我也有同样的问题。
如果我填充数据table,然后查询 DataColumns - 他们都说 AllowDBNull== true 和 allowNull == true。但是,如果我查看 SSMS 中的 table,它会另有说明。
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 基于服务器的 table,我可以使用 Microsoft.SqlServer.Management.Sdk 和 Microsoft.SqlServer.Management.Smo。既然我不是,那就不行了。
ResultSet 不会像那样知道列架构数据,每次执行命令时执行该操作过于密集,相反,运行时将仅使用它返回的数据动态创建架构信息在 data/result-set。对于完整的架构,您必须使用 EF 之类的东西或自己编写架构代码。运行时模式唯一可以依赖的是数据类型(除非数据列是用它们的属性专门编码的)。
要正确测试 DbNull,请执行以下操作:
if ( dataRow[colNameOrIndex].Value == DbNull.Value){
//null
}
尝试
var Results = DataAdapter.FillSchema(NewData, SchemaType.Source, tableName);
看看这是否为您提供了所需的架构详细信息级别。