Visual Studio 2008有一个错误,您无法使用数据集设计器将int类型字段设置为可为空。 (有错误报告可以追溯到Visual Studio 2005,但似乎从未解决过这个问题。)
唯一可选择的行为是发出代码,如果从数据库传回空值,则引发异常,而不是将值设置为null,这将要求数据类型为“int?”而不是“int”。 一个真实世界的示例情况是外键为null,因为尚未分配依赖对象。
除了1之外是否有任何合理的解决方法,不使用Visual Studio数据集,2。将数据类型更改为字符串(允许null但是否定强类型点并强制进行多次转换),或者3.更改发出的代码(如果通过设计师对数据集进行任何更改,将覆盖该内容。
答案 0 :(得分: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” />
编辑和保存DataSet时,这些更新不会丢失。
公平警告:我从未尝试过此代码。有人评论作者的博客说这在VS2008中对他不起作用(寻找“Tom”发布的第二条评论)。汤姆确实提出了修复方案。
我希望它适合你。
答案 1 :(得分:0)
在connect.microsoft.com主题(Danila Korablin的Nullable types for typed dataset)上建议了一个解决方法,它说明了一种可以替代修复数据集的黑客攻击。
简而言之,它使用 myDataSet .cs模块中的部分类作为向行类添加可空属性的存储库。您可以在代码中访问这些属性,但不能在设计器中访问。这种添加属性的方式也无法取代原来破坏的属性。
“数据源”窗口也不会以这种方式显示您添加到数据集类的属性。如果您尝试通过添加正确可空类型的列来修复MS生成的数据表类,则数据源可视化工具无法理解它们,使数据集无效,因此它不显示任何内容。这意味着您无法使用Visual Studio的内置设计器来访问正确类型的列。
这种缺陷使得操作就像复制包含可空列的行一样简单。
我可以验证Visual Studio 2005的数据集设计器中不支持可空列。微软一再表明他们不会解决这个问题。