1

これは、SQL Server データベースのセットアップの問題である可能性がありますが、どこから調べればよいかわかりません。

私はストアドプロシージャを持っています:

CREATE PROCEDURE aStoredProcedure
@dteSince DATETIME = null
AS
...

ストアド プロシージャを呼び出す C# コードは次のとおりです。

using (IDataReader dr = database.ExecuteReader("aStoredProcedure"))
{
...

C# コードは運用環境で正常に動作します。ここでは、dteSinceは入力パラメーターとして指定されていないため、null に設定されます。

問題は、これをUAT環境で実行すると、タイトルに示されているメッセージが返されることです -パラメーターの数が間違っています...

コードを次のように変更することで、これを修正できます。

using (IDataReader dr = database.ExecuteReader (CommandType.StoredProcedure, "aStoredProcedure"))
{
...

この修正は、ある環境ではコードが失敗し、別の環境では問題なく動作するという実際の問題を覆い隠すだけです。

ストアド プロシージャを削除して再作成しましたが、うまくいきませんでした。

テクノロジは、C# 2.0 および Sql Server 2005 を使用しました。

4

3 に答える 3

3

とにかく CommandType は常に指定する必要があります-明示性は常に暗黙性よりも優先されます。両方の環境で異なる何かがフードの下で起こっていることは明らかですが、コマンドの種類について明示している場合、コードは期待どおりに機能します。

私が考えることができる唯一のこと - データベースの設定はまったく同じですか - 特にNULLの扱いですか?

編集

チェックSET ANSI_NULLS ON/OFFしてSET CONCAT_NULL_YIELDS_NULLオン/オフする価値があるかもしれません - 両方のデータベースのプロパティを見て、設定が一致しているかどうかを確認できます。

于 2009-03-02T11:30:59.983 に答える