如何以编程方式设置ADO.Net DataTable的DataColumn的NullValue属性

问题描述 投票:3回答:3

我的项目中有许多新的向导创建的DataTables,我需要从中提取数据。这些表中有许多带有dbnull值的字符串列,我想将其提取为空字符串。

所以我继续将NullValueDataColumnDataTypeSystem.String(Throw exception)改为(Empty),如下所示:

我很快就厌倦了所有重复的工作,所以我尝试在我的应用程序的数据层中以编程方式设置NullValue

然而,我甚至无法找到这个属性。我甚至反编译了System.Data.DataColumn的代码,并且NullValue属性似乎不存在。 NullValue可能是Microsoft.VSDesigner.Data.Design.DataColumnEditor的一些神奇特征,但这仅仅是目前的一种怀疑。

我如何以编程方式实现与在属性编辑器中将NullValue设置为(Empty)相同的效果?

c# visual-studio datatable ado.net dbnull
3个回答
1
投票

我知道这是旧的,但之所以不可能是因为NullValue属性确定了Visual Studio为该列生成的代码。如果选择了Throw Exception,代码将显式检查DbNull并抛出异常,如果这是从数据库返回的内容。如果选择了Empty,则返回DbNull时生成的代码将返回空字符串。这是生成的,因此编译代码,因此您无法在运行时以编程方式更改此行为。


0
投票

是。 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";

          }

}


0
投票

Visual Studio将任何数据表的每个数据列视为单独的实体,这就是为什么它不能同时提供任何有效的方法来处理所有数据表的原因。因此,我们没有以编程方式准确的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.