0

C# の DateTime 値を SQL Server 2005 ストアド プロシージャに渡すときに問題が発生しています。

ストアド プロシージャは型のパラメーターを取り、DateTime渡された値でデータベース列を更新します (列もdatetime型です)。

ALTER PROCEDURE [dbo].[ProcedureName]
    @id int,
    @eta datetime
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    BEGIN TRANSACTION

    UPDATE
            TrackingTable
    set 
        ETA = @eta
    where 
        ID = @id

    COMMIT TRANSACTION
END

パラメータ化されていないクエリdatetimeを作成して実行することにより、ストアド プロシージャにC# の値を渡します。SqlParameter

アナライザーを介して、実行された SQL が次のようになっていることがわかります。

exec ProcedureName @id=19020, @eta='2012-07-17 10:29:34:000'

これをデータベースで直接実行すると、更新は正常に機能しますが、私の C# プログラムでは次のエラーで失敗します。

char データ型から datetime データ型への変換により、範囲外の datetime 値が発生しました。ステートメントは終了されました。

私はばかげていると確信していますが、何が悪いのか一生わかりません。PS SQL Server は初めてです。

どんな助けでも大歓迎です!ありがとう。

申し訳ありませんがC#コード:

dbWrapper.ExecuteProcWithParams("ProcedureName", 
                dbWrapper.CreateParameter("id", Header.VoyageID),
                dbWrapper.CreateParameter("eta", ETA)

ETA は DateTime 値です。

public void ExecuteProcWithParams(string procName, params DbParameter[] parameters)
{
    try
    {
            using (DbCommand cmd = db.CreateCommand())
            {
                cmd.Transaction = trans;
                cmd.CommandText = procName;
                cmd.CommandType = CommandType.StoredProcedure;

                foreach (DbParameter param in parameters)
                {
                    cmd.Parameters.Add(param);
                }

                cmd.ExecuteNonQuery();
            }
    }

    catch (Exception)
    {
        throw;
    }
}



public DbParameter CreateParameter(string name, object value)
 {
        DbParameter result = null;

        switch (databaseType)
        {
            case DatabaseType.SqlServer:
                // Sql Server: NULL parameters have to initialised with DBNull rather than NULL
                result = new SqlParameter(name, value ?? DBNull.Value);                   
                break;
            default:
                throw new Exception(String.Format("Unknown database type {0}", databaseType));
        }

        return result;
 }
4

2 に答える 2

0

web.config で uiculture と culture を設定してみてください。

<globalization uiCulture="en-GB" culture="en-GB"/>

渡す日付の形式と sql の日付は異なる場合があります。したがって、あなたの文化に合わせて文化を設定してください。

于 2012-07-17T10:36:08.060 に答える
0

私はちょうど同様の問題に直面しました!

C#変換date timeMM-DD-YYY、SQL サーバーがdate timeに基づいて生成するためDD-MM-YYYYです。

そのため、月に範囲外エラーが発生します。

于 2013-07-24T20:03:29.670 に答える