2011-01-01 45 views
1

バックエンドにトランザクション日付の日時フィールドがあります。だから私は、以下の形式で、フロントのC#.NETからその日を渡しています:C#からsqlバックエンドに任意の日付形式を渡すには

プレゼンテーション層:

string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture); 
PropertyClass prp=new PropertyClass(); 
Prp.TransDate=Convert.ToDateTime(date); 

PropertyClass構​​造を:

2011-01-01 12:17:51.967 

は私が書かれているこれを行うには

Public class property 
{ 
private DateTime transdate; 
public DateTime TransDate 
{ 
    get 
    { 
     return transdate; 
    } 
    set 
    { 
     transdate = value; 
    } 
    } 
} 

DALレイヤーから次のようにTransactionDateを渡します。

Cmd.Parameters.AddWithValue("@TranSactionDate”, SqlDbType.DateTime).value=propertyobj.TransDate; 

presntation層からデバッグ中:この中

string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture); 

/私は正しい予想される日付の形式を取得していますが、デバッグが再びこのライン

Prp.TransDate=Convert.ToDateTime(date); 

になると、日付形式は1に変更1/2011。

しかし、私のバックエンドのSQLのdatefieldは、日付のパラメーターが2011-01-01 12:17:51.967の形式でなければ、例外の無効な日付形式をスローします。

注:

System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753  12:00:00 AM and 12/31/9999 11:59:59 PM. at System.Data.SqlTypes.SqlDateTime.FromTimeSpan(TimeSpan value) at System.Data.SqlTypes.SqlDateTime.FromDateTime(DateTime value) at System.Data.SqlTypes.SqlDateTime..ctor(DateTime value) at System.Data.SqlClient.MetaType.FromDateTime(DateTime dateTime, Byte cb) at System.Data.SqlClient.TdsParser.WriteValue(Object value, MetaType type, Byte scale, Int32 actualLength, Int32 encodingByteSize, Int32 offset, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc) 
+1

「DateTime」の値には書式はありません。このフォーマットは、 'DateTime'を' string'に変換するときだけ有効です。 – Gabe

+0

私はトランザクションの日付をDALに渡すときには "propertyobj.TransDate"を使用していますが、他の場所では "Prp.TransDate"を参照しています。これは実際にコード内にあるのでしょうか、あなたの質問を構成するときに間違ったエラーですか? – MartW

答えて

0

パラメータとして直接DateTimeのインスタンスを渡してみてください:のような例外が取得日時に変換することなく、文字列として日付を通過させながら

Cmd.Parameters.AddWithValue("@TranSactionDate", DateTime.Now); 
+0

Darin Dimitrov->引き続き同じ例外が発生する:System.Data.SqlTypes.SqlTypeException:SqlDateTimeがオーバーフローする。 1/1/1753 12:00:00 AMと12/31/9999 11:59:59 PMの間である必要があります。 System.Data.SqlTypes.SqlDateTime.FromTimeSpan(TimeSpan値)System.Data.SqlTypes.SqlDateTime.FromDateTime(DateTime値)System.Data.SqlTypes.SqlDateTime..ctor(DateTime値)System.Data.SqlClientで。 MetaType.FromDateTime(DateTime dateTime、Byte cb)at System.Data.SqlClient.TdsParser.WriteValue(オブジェクト値、メタタイプタイプ、バイトスケール、Int32 actualLength、Int32 encodingByteSize、Int32オフセット、TdsParserStat ... – Jims

+0

@Jims:正直言って –

2

あなたが言う:

So I am passing that date from front C#.net, in the below format: 

しかし、私は何の証拠も見ることができませんどんな書式設定でも使用していることを実感してください。実際にはであってはいけません。 DateTimeには、固有の形式はありません。数値以外の形式はありません。同じ番号を16進数または10進数で表示できるのと同じように、さまざまな方法で同じ日付と時刻を表示できます。

正しいフォーマットではなく、DateTimeをデータベースに直接渡しています(通常、日付/時刻のフォーマットに関する質問やデータベースはパラメータ化されたクエリを使用しない人に関するものです)。書式設定についてまったく心配する必要はありません。

の可能性:あなたのデータは、他の場所で壊れてきている、とあなたは、実際に1753年前の日付を持っている

  • あなたのSQL文の誤った値を使用している
  • データベースドライバと間違って何かがあります(あなたはどのデータベースを使用しているのかは分かりませんが、SQL Serverですか?)
+0

Jon Skeet-> SQL Server 2005を使用していて、e-connectストアドプロシージャを呼び出そうとしています...このspは私によって構築されていません。 。 – Jims

+0

@Jims:ストアドプロシージャを呼び出す直前の*またはAddWithValueを呼び出す直前の*日付時刻*を書き出すと、どのような日付が表示されますか?例外が存在する値を構築しているようですスローされました...つまり、実際にはそれを作っていませんデータベース。 –

+0

同じ例外が発生するのを試してみた – Jims