5

こんにちは、次の挿入クエリを実行しようとしています

SqlDataSource userQuizDataSource = new SqlDataSource();
userQuizDataSource.ConnectionString = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=quizApp;Integrated Security=True";
userQuizDataSource.InsertCommand = "INSERT INTO [UserQuiz] ([DateTimeComplete], [Score], [UserName]) VALUES (@DateTimeComplete, @Score, @UserName)";

userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now.ToString());
userQuizDataSource.InsertParameters.Add("Score", score.ToString());
userQuizDataSource.InsertParameters.Add("UserName", User.Identity.Name);

int rowsAffected = userQuizDataSource.Insert();

しかし、次のエラーが発生し続けます。

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

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

4

5 に答える 5

4

あなたの声明は何をDateTime.Now.ToString()返しますか??

SQL Server が想定している言語と地域の設定は??

そこにミスマッチはありますか???おそらく、.NET はMM/dd/yyyyフォーマットを返しますが、SQL Server は期待していますdd/MM/yyyy(またはその逆)。

SQL Server で次のコードを試してください。

DECLARE @test TABLE (smalldate SMALLDATETIME)
INSERT INTO @test VALUES ('02/21/2010 22:00:32') --
SELECT * FROM @test

そこにある私の文字列を.NETから得た出力に置き換えますDateTime.Now.ToString()-これは機能しますか? SQL Server はより適切なエラー メッセージを表示しますか?

次に、日付に ISO-8601 形式 (YYYYMMDD) を使用してみてください。これは、SQL Server のすべての地域と言語の設定で機能します。これは機能しますか??

DECLARE @test TABLE (smalldate SMALLDATETIME)
INSERT INTO @test VALUES ('20100221 22:00:32') --
SELECT * FROM @test
于 2010-02-21T21:59:25.297 に答える
1

データ型 SmallDateTime に設定された SQL サーバー列 'Date' に datetime.now を追加するのと同じ問題がありました。

それを解決するのは非常に簡単でした(何度も試みた後!!)

string currentdatetime=
DateTime.Now.Year + "." + DateTime.Now.Month + "." + DateTime.Now.Day +
               " " + DateTime.Now.Hour+(":")+DateTime.Now.Minute+(":")+DateTime.Now.Second

これにより、サーバーが期待する形式に日付が返されます

于 2011-04-14T08:41:38.150 に答える
0

これを変更してみてください:

userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now.ToString());

これに:

userQuizDataSource.InsertParameters.Add("@startdate", SqlDbType.DateTime, DateTime.Now.ToString());
于 2010-02-21T21:40:23.873 に答える
0

日付を文字列に変換しないでください:

userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now);

編集:これを試してください:

userQuizDataSource.InsertParameters.Add("DateTimeComplete", TypeCode.DateTime, DateTime.Now.ToString());

実際のオブジェクトを渡す別の方法がありますが、思い出せません..申し訳ありません。

于 2010-02-21T21:41:35.587 に答える