我的项目中有许多新的向导创建的DataTables,我需要从中提取数据。这些表中有许多带有dbnull值的字符串列,我想将其提取为空字符串。
所以我继续将NullValue
的DataColumn
和DataType
的System.String
从(Throw exception)
改为(Empty)
,如下所示:
我很快就厌倦了所有重复的工作,所以我尝试在我的应用程序的数据层中以编程方式设置NullValue
。
然而,我甚至无法找到这个属性。我甚至反编译了System.Data.DataColumn
的代码,并且NullValue
属性似乎不存在。 NullValue
可能是Microsoft.VSDesigner.Data.Design.DataColumnEditor
的一些神奇特征,但这仅仅是目前的一种怀疑。
我如何以编程方式实现与在属性编辑器中将NullValue
设置为(Empty)
相同的效果?
我知道这是旧的,但之所以不可能是因为NullValue
属性确定了Visual Studio为该列生成的代码。如果选择了Throw Exception
,代码将显式检查DbNull
并抛出异常,如果这是从数据库返回的内容。如果选择了Empty
,则返回DbNull
时生成的代码将返回空字符串。这是生成的,因此编译代码,因此您无法在运行时以编程方式更改此行为。
是。 DataColumn的DefaultValue属性不起作用,因为您已经有许多准备好的DataTables。这是一个可能的解决方案=>您可以先将所有表放在一个DataSet中(比如ds),然后使用以下代码:
for(int i = 0; i <ds.Tables.Count; i ++)
{
for (int j = 0; j < ds.Tables[i].Columns.Count; j++)
{
if(ds.Tables[i].Columns[j].DataType==typeof(string))
ds.Tables[i].Columns[j].DefaultValue = "empty string";
}
}
Visual Studio将任何数据表的每个数据列视为单独的实体,这就是为什么它不能同时提供任何有效的方法来处理所有数据表的原因。因此,我们没有以编程方式准确的解决方案。