2

SQL Serverストアドプロシージャ(ディスカッション用、fooSproc)を呼び出し、結果をSqlDataReaderで処理する.NETクラス(ディスカッション用、ClassA)があります。行が処理され、返された結果セットの列の名前を使用して列が参照されます。たとえば、drはSqlDataReaderであり、dr["column_foo"]のようなものです。

たとえば、誰かがClassAへの変更をチェックインして、fooSprocによって返された結果セットでcolumn_barを探しているとします。ただし、その人は、実際にcolumn_barを返すようにfooSprocへの変更をチェックインすることを怠りました。

問題:コードはコンパイルされますが、列がないために実行時に失敗します。

このシナリオでビルドエラーが発生するようにする方法はありますか?当然のことながら、ビルドの検証/受け入れテストはここでは理にかなっていますが、それを早くキャッ​​チする方が安価です。表面的なコードレビューでさえ範囲外であると偽ってください。

4

2 に答える 2

2

基本的に、いいえ。これは常に実行時エラーになります。

解析、実行、AutoSProc を使用したリフレクトなど、常に SQL Server に対してコードを実行する必要があります。SQL Server は、あなたが Excel/VBA であるか Visual Studio であるかを気にしません。あなたは単なる別の顧客です...

于 2010-07-26T22:13:29.363 に答える
1

コンパイル時にコードをデータベースに接続する必要があるため、.NetとSQLだけを使用してそれを行う方法を実際には知りません。

つまり、コードを作成するときに、(その時点で) db にアクセスし、クエリを解析しようとする必要があります。VSはそれをしません。Linq-to-SQL と Entity Framework はあなたを近づけるかもしれませんが、特定のシナリオ (ストアド プロシージャへの変更) を助けることさえできないと思います。

.NET SMO (Sql Management Objects) を使用して何かを作成できるかもしれませんが、それでもデータベースに接続する必要があります...根本的な問題は、ストアド プロシージャを確認する必要があることです。最初に書かれたときに行ったことをまだ返します.SQLは、その種のデータを簡単にアクセスできる形式で提供するとは思いません(単にprocを見る以外に)。

于 2010-07-26T22:11:53.240 に答える