0

カレンダーコントロールの使用に問題があります..テキストボックスで日付を取得しています...そしてこれをデータベースに挿入する必要があります..c#でasp.netを使用しています

私のWebアプリケーションでは、フィールドプロパティはに設定されてdatetimeおり、テーブルでは列のデータ型はdate.です。

これどうやってするの??

私が得ているエラーは次のとおりです。

varcharデータ型を日時データ型に変換すると、値が範囲外になりました。ステートメントは終了されました。

誰かがこの点で私を助けることができますか?

前もって感謝します

4

4 に答える 4

3

私が得ているエラーは次のとおりです。 varchar データ型を datetime データ型に変換すると、範囲外の値が発生しました。

文字列として挿入しようとしているように聞こえますが、これは一般的に悪い考えです。パラメータ化された SQL を使用し、値をパラメータとして、引き続き .NET として設定する必要がありますDateTimeSqlCommand.Parametersパラメータ化された SQL の例については、ドキュメントを参照してください。可能な限り、常にデータを本来の型のままにしておく必要があります。

もちろん、SQL が格納できる範囲外の値を挿入しようとすると、このエラーが発生する可能性がありますDateTime特に、SQL では年として 1753 という下限があると思います。値がDateTime.MinValue何らかの理由 (西暦 1 年 1 月 1 日) である場合でも、この問題が発生します。挿入しようとしている値の診断を追加しましたか?

于 2012-07-31T05:57:26.190 に答える
0

申し訳ありませんが、私の最初の回答はあなたの質問を見逃していました。標準のパラメータ システムを使用して、パラメータを追加してみてください。

command.CommandText = "INSERT INTO FooTable (FooDate) VALUES (@FooDate)"; command.Parameters.AddWithValue("@FooDate", DateToUse.Date);

.Date を使用すると、オブジェクトの日付部分のみが返されます。ここに別の参照がありますDate vs DateTime

于 2012-07-31T06:16:47.733 に答える
0

パラメーター化されたクエリを使用している場合DateTime、ASP.NET カレンダー コントロールから、型の列を含む SQL Server データベース テーブルにそれを挿入するのに何の問題もありませんDATE

次のようなものを使用します。

// define INSERT statement - of course, yours will look quite different!
string insertStmt = "INSERT INTO dbo.DateTest(TheDate) VALUES(@DateValue);";

// set up connection and SqlCommand to do insert
using(SqlConnection conn = new SqlConnection("....your-connection-string-here...."))
using (SqlCommand cmd = new SqlCommand(insertStmt, conn))
{
     // add the parameters - the @DateValue - to the SqlCommand object and
     // define it's datatype (on the database) and set the value to be stored
     cmd.Parameters.Add("@DateValue", SqlDbType.Date).Value = Calendar1.SelectedDate;

     // open connection, execute command, close connection
     conn.Open();
     cmd.ExecuteNonQuery();
     conn.Close();
}
于 2012-07-31T06:18:16.967 に答える
-1

最初に 1 つのことを試してください。列に 01/01/2012 を挿入してみてください。これは、文化が間違っている可能性があるためです.... mm/dd/yyyy または dd/mm/yyyy の可能性があります。

この 2012 年 1 月 1 日を最初に試して、それが機能するかどうかを確認してください。

ありがとう

于 2012-07-31T06:09:02.327 に答える