0

我正在更新严重依赖强类型数据集的现有应用程序。
最初的开发人员在每个数据集上创建了许多非常相似的查询来处理可能的任何参数组合,这很难更新。

所以我只创建了其中的几个,但带有可选参数,所以如果参数设置为 null ,则过滤器将被忽略:WHERE (@code IS NULL OR art_code = @code)并且使用大多数参数。
为此,我必须手动访问和编辑ParametersQuery 属性中的集合以设置AllowDbNullTrue(我猜由于该列不可为空,设计器会自动将其设置为False

这工作得很好,正如预期的那样。

问题是设计者不断重置这个值,每次我编辑数据集时都有很高的回归风险,即使我没有接触查询。

我能做些什么来防止这种情况发生吗?
这可能是我编写查询的方式?

C# 4.0 / Visual Studio 2012 / Sql server 2012

4

1 回答 1

2

事实上,设计师有这些弱点真是让人头疼。我过去曾在表格中引入虚假列或永远不会成功的 where 子句,只是为了让设计者形成不同的意见

尝试将这样的内容添加到您的查询 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)

如果它不起作用,请交换顺序,以便您的虚拟列首先出现在 where 中。

如果不起作用,您可以编写一个程序来检查 dataSet xml 并恢复任何相关更改,将其作为您在 e 项目中的预构建事件设置的一部分,以便每次构建完成时它都会运行。应用程序可能还必须调用数据集生成器。你如何做到这一点我不确定自定义工具中的 MSDatasetGenerator 可能与带有 /dataSet 参数的 xsd.exe 不同。至少您可以使用错误代码退出您的数据集修复应用程序,这会停止构建并确保诸如“数据集修复已执行,右键单击数据集 xx 并选择运行自定义工具,在解决方案资源管理器中”之类的错误被抽出到命令行

您还可以通过使用源代码控制(例如 mercurial 或 git)并将您的代码保存在 bibucket 之类的某个地方来减轻自己的痛苦。自从将代码保存在版本控制系统中以来,我节省的工时数不胜数。每次您进行提交时,如果集合已更改,即使您没有触摸它,恢复对数据集的更改的选项也会有效,如果您需要在恢复后重新编译(也可能重新运行自定义工具)

于 2017-07-28T05:54:21.520 回答