2

我有一个 .NET 类(用于讨论,ClassA),它调用 SQL Server 存储过程(用于讨论,fooSproc),使用 SqlDataReader 处理结果。处理行,并使用返回的结果集中的列名引用列。例如,其中 dr 是 SqlDataReader,类似于 dr["column_foo"]。

现在,例如,有人签入对 ClassA 的更改,以便在 fooSproc 返回的结果集中查找 column_bar。然而,那个人忽略了检查对 fooSproc 的更改,以至于它实际上会返回 column_bar。

问题:代码编译,但由于缺少列而在运行时失败。

有没有办法让这种情况导致生成错误?自然地,构建验证/验收测试在这里是有意义的,但更早捕获它会更便宜。请假装即使是肤浅的代码审查也超出了范围。

4

2 回答 2

2

基本上,没有。它总是一个运行时错误。

无论是使用 AutoSProc 进行解析、运行还是反映,您都必须始终针对 SQL Server执行代码。SQL Server 不在乎你是 Excel/VBA 还是 Visual Studio:你只是另一个客户......

于 2010-07-26T22:13:29.363 回答
1

我真的不知道仅使用 .Net 和 SQL 的任何方法,因为您的代码必须在编译时连接到您的数据库。

也就是说,当您构建代码时,它必须(当时)有权访问数据库,并尝试解析您的查询。VS 不这样做。Linq-to-SQL 和实体框架可能会让您更接近,但我认为他们甚至无法帮助您解决特定场景(更改存储过程)。

您也许可以使用.NET SMO(Sql Management Objects)创建一些东西,但即使这样也需要连接到数据库才能做任何好事......潜在的问题似乎是您需要检查存储过程仍然返回它最初编写时所做的事情,而且我认为 SQL 不会以任何易于访问的形式提供这种数据(除了查看 proc 之外)。

于 2010-07-26T22:11:53.240 回答