0

我在使用日历控件时遇到问题..我在文本框中获取日期...我必须将其插入数据库..使用 asp.net 和 c#

在我的 Web 应用程序中,字段属性设置为datetime,在表中,列的数据类型为date..

我怎样才能做到这一点??

我得到的错误是:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。该语句已终止。

有人可以在这方面帮助我吗?

提前致谢

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 = "插入到 FooTable (FooDate) 值 (@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

首先尝试一件事,尝试在列中插入 01/01/2012,因为这可能是由于错误的文化......它可能是 mm/dd/yyyy 或 dd/mm/yyyy

先试试这个 2012 年 1 月 1 日,看看这是否有效。

谢谢

于 2012-07-31T06:09:02.327 回答