2012-01-04 9 views
0

私は最近、cteクエリのデバッグ中にいくつかの関数を最近変更しました(ここで助けを得ています)。私はちょうどいくつかの関数を変更しました..これは私のクエリが動作するようになりました..しかし、今私のC#のクライアントコードは、私のプログラムロジックのために格納されたprocsを介してそれらの関数を呼び出すときにエラーが発生します "プロシージャまたは関数 'DateTimeOfNextAvailableDataRun' NextDateTime 'は提供されませんでした "複数の値が戻ってきているのでしょうか?SQL server stored proc "プロシージャまたは関数は、パラメータが指定されていません。"

ここで現在の形での機能です:

ALTER FUNCTION dbo.NextAvailableDataDownloadDateTime() 
    RETURNS date 
BEGIN 
    RETURN (SELECT DATEADD(hour, 18, MIN(TradingDate)) AS TrDate 
    FROM tblTradingDays 
    WHERE (DATEADD(hour, 18, TradingDate) > dbo.LatestDataDownloadDate())) 
END 

そして、それを呼び出すストアドプロシージャ:

ALTER PROC DateTimeOfNextAvailableDataRun 
    @NextDateTime DateTime2 OUTPUT 
AS 
    SELECT @NextDateTime = dbo.NextAvailableDataDownloadDateTime() 

そして最後に変更する前に実行しなかった私のクライアントコード、:

public DateTime DateTimeOfNxtAvailableDataRun() 
      { 
       DateTime dateTimeOfNxtAvailableDataRun; 

       using (SqlCommand cmd = new SqlCommand("DateTimeOfNextAvailableDataRun", this.sqlConnection)) 
       { 
        cmd.CommandType = System.Data.CommandType.StoredProcedure; 
        cmd.ExecuteNonQuery(); 
        dateTimeOfNxtAvailableDataRun = (DateTime)cmd.ExecuteScalar(); 
       } 

       return dateTimeOfNxtAvailableDataRun; 
      } 

任意の受取人ですか?繰り返しますが、関数はSQL Serverのクエリ(最近の投稿を参照)内で動作しますが、現在の呼び出しコードは異なります..

答えて

2

usingステートメントの本文を修正し、コマンドを実行する前に出力パラメータを追加する必要があります。

var outputParameter = new SqlParameter { 
    ParameterName = "@NextDateTime", 
    Direction = ParameterDirection.Output 
}; 
cmd.Parameters.Add(outputParameters); 
cmd.ExecuteNonQuery(); 
return (DateTime)outputParameter.Value; 
+0

わかりましたが、私はそれなしで走っていました。私は確信しています。深夜の試行錯誤の私の時間ではないかもしれない。 – StatsViaCsh

+0

値を返すことはできませんか?このような単純な関数の出力パラメタよりもはるかに直感的です。 – StatsViaCsh

+0

ストアドプロシージャから非整数値を返すことはできません。しかし、SELECT dbo.NextAvailableDataDownloadDateTime()のようなストアドプロシージャの値を 'SELECT'するだけで、' ExecuteNonQuery() 'の代わりに' cmd.ExecuteScalar() 'を使い、その結果を' DateTime'にキャストすることができます –

関連する問題