0

ストアド プロシージャで C# の DateTime と SQL サーバーの DateTime を比較しようとしていますが、変換エラーが発生し続けます。

最初は、他の誰かがこのために Oracle 関数を作成しました。

'Select blabla from bla WHERE (TO_DATE (''' + cast(@dateEnd as varchar(50)) + ''',''yyyy/mm/dd'') >= SPOT_ENDDAT) 

これを SQL に変更しようとしていますが、SQL には TO_DATE 関数がありません。

何か案は?それとも、.net プログラム自体のレベルで変更を加える必要がありますか? はいの場合、どうすればよいですか?

編集:

このパラメーターを使用して関数ストアド プロシージャを呼び出す:

DateTime EndDate = DateTime.Today;

ParamList.Add(new <class>.Parameter("EndDate", ParameterDirection.Input, EndDate, DbType.Date));

ストアド プロシージャ:

ALTER PROCEDURE dbo.uspGetValues
         @EndDate = null;
         AS
         BEGIN
         SET NOCOUNT ON;

         DECLARE @SQL as NVARCHAR(4000)
         Set @SQL = 'SELECT * FROM T_SPOTSHOP_DATA WHERE SPOT_ENDDATE IS NOT NULL'
         if(@EndDate is not null)
         Set @SQL = @SQL + 'AND (' + @EndDate +' <= SPOT_ENDDATE' 

         EXEC(@SQL)

ソリューションの編集:

同じ問題を抱えている人のために、逆に修正しました。C#では、次を使用します:

DateTime EndDate = DateTime.Today.toString(yyyy-MM-dd);

ParamList.Add(new <class>.Parameter("EndDate", ParameterDirection.Input, EndDate, DbType.Date));

そして、ストアドプロシージャで次のようにキャッチします。

EndDate Varchar(50)

SET @SQL = @SQL + 'WHERE CONVERT(DATETIME, '''+ @EndDate +''', 121) >= SPOT_ENDDATE

それを行うのはかなり醜い方法ですが、うまくいきます。皆さんのお役に立てば幸いです。

4

3 に答える 3

0

これを試して:

Select 
    blabla 
from 
bla 
 WHERE CAST(@dateEnd AS DATETIME) >= CAST(SPOT_ENDDAT AS DATETIME)
于 2013-12-09T09:37:00.883 に答える
0

CONVERT を使用して T-SQL で変換を実行できますが、私はそうしません。

可能な限り文字列変換を避けることを強くお勧めします。パラメータ化された SQL を使用し、パラメータを DateTime として指定するだけです。

// Assuming dateEnd is a DateTime variable
string sql = "SELECT blabla FROM bla WHERE @dateEnd >= SPOT_ENDDAT";
using (var command = new SqlCommand(conn, sql))
{
    command.Parameters.Add("@dateEnd", SqlDbType.DateTime).Value = dateEnd;
    // Execute the command here
}

Oracle についても同様のことを行います。タスクに本質的にテキストと「ネイティブ」データ型の間の変換が含まれていない限り、実行しないでください。

または、もちろんLINQプロバイダーを使用してください。その時点で、より読みやすいクエリを開始できます:)

于 2013-12-09T09:38:23.400 に答える
0

.Net DateTime 値をパラメーターとして Sql コマンドに渡すだけです。データベース ドライバーは、Sql Server の日付時刻への変換を自動的に処理します。

于 2013-12-09T09:39:40.300 に答える