【问题标题】: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 确实提出了解决办法。

      我希望它对你有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 1970-01-01
        相关资源
        最近更新 更多