1

OSQLinnoセットアップを使用していくつかのSQLクエリを実行しています。次のコードを使用して実行していますOSQL。これは単なる例です

SQLQuery:= '"EXEC sp_addserver ''PCNAME'';"';
Param:= '-S(local) -Usa -Psa -Q ' + SQLQuery;
Exec('osql.exe', Param, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);

これはうまくいきます。問題は、ResultCode値が常に 0 であることです。クエリが実行されない場合でも。たとえば、無効なストアド プロシージャ名を渡す以下のような同じクエリを試しても、ResultCodeまだ 0 です。

SQLQuery:= '"EXEC sp_invalidname ''PCNAME'';"';
Param:= '-S(local) -Usa -Psa -Q ' + SQLQuery;
Exec('osql.exe', Param, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);

これで適切なコードが返されないのはなぜですか。管理スタジオで 2 番目のクエリを実行すると、次のようなエラーが表示されます

Msg 2812, Level 16, State 62, Line 1 Could not find stored procedure 'sp_invalidname'

ここで戻りコードは2812. innoで実行すると、これが得られないのはなぜですか。innoでこのエラーコードを取得するにはどうすればよいですか?

4

1 に答える 1

2

TLama のおかげで、コードを以下のように更新し、現在動作しています。-bコマンド ライン パラメータを追加する必要がありましたが、コマンドが失敗すると 1 が返されるようになりました。

-b エラーが発生したときに osql が終了し、DOS ERRORLEVEL 値を返すように指定します。SQL Server エラー メッセージの重大度が 11 以上の場合、DOS ERRORLEVEL 変数に返される値は 1 です。それ以外の場合、返される値は 0 です。Microsoft MS-DOS バッチ ファイルは、DOS ERRORLEVEL の値をテストし、エラーを適切に処理できます。

以下のようにコードを更新しました。

Param:= '-S(local) -Usa -Psa -b -Q ' + SQLQuery;

ドキュメントで説明されています。

于 2015-03-05T16:36:44.680 に答える