【问题标题】:How to insert datetime property from asp.net c# to a date column in sql server?如何将asp.net c#中的日期时间属性插入到sql server中的日期列?
【发布时间】:2012-07-31 05:50:54
【问题描述】:

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

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

我该怎么做??

我得到的错误是:

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

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

提前致谢

【问题讨论】:

  • 您可能希望包含有关数据库架构和用于更新数据库的 C# 的一些信息。但是,听起来您没有在数据库中使用正确的列类型。
  • 我通常不使用 asp.net 网络表单,所以我需要知道:您是自己插入/更新日期,还是控件应该这样做?与往常一样,问题可能在于日期、区域设置、日期格式。
  • 感谢 Layoric 的及时回复,实际上我的数据库 (sqlserver2008r2) 表中有两个文件,现在来自应用程序(.NET 4)端的日期数据类型我想在该表中插入一些值,但是在 asp.net C# 中没有日期数据类型我必须使用 datetime 日期类型但我收到此错误..我不知道如何解决这个问题?
  • @SteenT 日历控件正在将日期插入到后端前端的文本框中,我将其插入到表中它没有发生,因为在我的表中我有日期数据类型,另一方面在 asp.net没有日期时间的网络表单没有单独的日期数据类型

标签: c# asp.net sql-server sql-server-2008-r2


【解决方案1】:

我得到的错误是:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

听起来您正试图将其作为字符串插入,这通常是个坏主意。您应该使用参数化 SQL 并将值设置为参数,仍为 .NET DateTime。有关参数化 SQL 的示例,请参阅SqlCommand.Parameters 的文档。您应该尽可能长时间地保持数据的自然类型。

当然,如果您尝试插入超出 SQL 可以存储范围的DateTime 值,那么仍然可能会出现此错误。特别是,我认为 SQL 的下限为 1753 作为年份。如果由于某种原因(公元 1 月 1 日)您的值是 DateTime.MinValue,那么您仍然会遇到此问题。您是否为尝试插入的值添加了诊断信息?

【讨论】:

  • 我也遇到过这样的 DateTime 问题 - 我的主要答案也已列出。但是我在这两个方面都遇到了问题,我遇到的一个问题是 DateTime 不够大,无法处理 FileTime。所以 SQL 2008 R2 在 SQL 中引入了 DateTime2。这解决了我的问题(一个肤浅的修复,但它有效);唉,如果可能的话,总是像@jon-skeet 说的那样使用参数。
【解决方案2】:

抱歉,我的第一个答案错过了您的问题。尝试使用标准参数系统添加参数。

command.CommandText = "插入 FooTable (FooDate) 值 (@FooDate)"; command.Parameters.AddWithValue("@FooDate", DateToUse.Date);

使用 .Date 只会返回对象的日期部分。这是另一个引用它Date vs DateTime

【讨论】:

    【解决方案3】:

    如果您使用的是参数化查询,我可以毫不费力地将 ASP.NET 日历控件中的 DateTime 插入到包含 @ 类型列的 SQL Server 数据库表中987654322@.

    使用这样的东西:

    // 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();
    }
    

    【讨论】:

      【解决方案4】:

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

      先试试这个 2012 年 1 月 1 日,看看是否可行。

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多