【问题标题】:Visual Studio Dataset Designer NullVisual Studio 数据集设计器空
【发布时间】:2010-12-11 20:30:30
【问题描述】:
Visual Studio 2008 有一个错误,即您无法使用数据集设计器将 int 类型字段设置为可为空。 (有返回到 Visual Studio 2005 的错误报告,但似乎从未得到解决。)
唯一可选择的行为是如果从数据库传回空值,则发出引发异常的代码,而不是将值设置为空,这需要数据类型为“int?”而不是“int”。
一个真实的例子是当一个外键为空时,因为依赖对象还没有被分配。
除了 1、不使用 Visual Studio 数据集、2. 将数据类型更改为字符串(允许 null 但否定强类型并强制进行大量转换)或 3. 更改发出的代码(如果通过设计器对数据集进行任何更改,它将被覆盖)。
【问题讨论】:
标签:
visual-studio
null
dataset
designer
【解决方案1】:
在 connect.microsoft.com 主题(Nullable types for typed dataset by Danila Korablin)上提出了一种解决方法,该方法说明了一种破解方法,可提供修复数据集的可用替代方法。
简而言之,它使用 myDataSet.cs 模块中的部分类作为向行类添加可为空的属性的存储库。您可以在代码中访问这些属性,但不能在设计器中访问。这种添加属性的方式也无法替代原来的损坏。
“数据源”窗口也不会显示您以这种方式添加到数据集类的属性。如果您尝试通过添加正确的可为空类型的列来修复 MS 生成的数据表类,则数据源可视化工具无法理解它们,从而使数据集无效,因此它什么也不显示。这意味着您无法使用 Visual Studio 的内置设计器访问正确类型的列。
这种缺陷使得像复制包含可空列的行一样简单的操作是不可能的。
我可以验证 Visual Studio 2005 的数据集设计器不支持可空列。微软一再明确表示他们不会解决这个问题。
【解决方案2】:
试试this link。
我怀疑作者跳过了许多与您相同的障碍,包括手动更新 DataSet 设计器代码(刚刚重新生成)和使用部分类。
在 VS2008 中对他有用的是手动编辑 DataSet .xsd 文件,为他需要修复的列添加以下值:
msprop:nullValue="-1"
nillable="true"
它的作用是返回 -1 代替 null 而没有错误。
作者给出了一个这样编辑的完整列的例子:
<xs:element name=“FolderParent_ID” msprop:nullValue=“-1” nillable=“true” msprop:Generator_UserColumnName=“FolderParent_ID” msprop:Generator_ColumnVarNameInTable=“columnFolderParent_ID” msprop:Generator_ColumnPropNameInRow=“FolderParent_ID” msprop:Generator_ColumnPropNameInTable=“FolderParent_IDColumn” type=“xs:int” minOccurs=“0” />
编辑和保存数据集时,这些更新不会丢失。
公平警告:我从未尝试过此代码。有人在作者的博客上评论说这在 VS2008 中对他不起作用(查找“Tom”发布的第二条评论)。不过,Tom 确实提出了解决办法。
我希望它对你有用。