我正在努力更新一个严重依赖强类型数据集的现有应用程序 原始开发人员在每个数据集上创建了许多非常相似的查询,以便可以手动处理任何可能的参数组合,这很难更新。
所以我只使用可选参数创建其中的一些,因此如果参数设置为null,则忽略过滤器:WHERE (@code IS NULL OR art_code = @code)
和大多数参数。
为此,我必须在查询属性中手动访问和编辑Parameters
集合,以将AllowDbNull
设置为True
(我想由于列不可为空,设计器会自动设置它到False
)
这非常有效并且符合预期。
问题是设计师不断重置此值,每次编辑数据集时都存在很高的回归风险,即使我没有触及查询。
我能做些什么来防止这种情况发生? 它可能是我编写查询的方式吗?
C#4.0 / Visual Studio 2012 / Sql server 2012
答案 0 :(得分:2)
事实上,设计师有这些缺点是完全痛苦的屁股。我过去曾在表格中引入虚假列,或者哪些条款永远无法解决,只是为了让设计师形成不同的意见
尝试在查询WHERE:
中添加类似的内容WHERE ((@code IS NULL OR art_code = @code) ... other clauses ...)
OR
--non-op to change visual studio dataSet designer behaviour, do not remove
(some_other_nullable_column_with_same_type = @code AND 0=1)
如果不能解决问题,请交换订单,这样您的虚拟列就会首先显示在哪里。
如果 无效,你可以编写一个检查dataSet xml并恢复任何相关更改的程序,将其作为e项目中预构建事件设置的一部分,以便它每次构建完成后都会运行。应用程序可能还必须调用dataSet生成器。你是怎么做的我不确定自定义工具中的MSDatasetGenerator可能与带有/ dataSet参数的xsd.exe不同。至少你可以使用错误代码退出dataSet修复应用程序,这会停止构建并确保出现“已执行dataSet修复,右键单击dataSet xx并选择运行自定义工具,在解决方案资源管理器中”这样的错误到命令行
你也可以通过使用源代码控制来节省一些痛苦,例如mercurial或git,并将代码保存在像bibucket这样的地方。自从我的代码保存在版本控制系统后,我保存的工时是不可数的;每次执行提交时,如果设置已更改,即使您没有触摸它,也可以选择将更改还原到您的数据集,应该在您还原后需要重新编译(可能重新运行自定义工具) / p>