【问题标题】:The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value?将 nvarchar 数据类型转换为 datetime 数据类型会导致值超出范围?
【发布时间】:2014-04-11 11:35:50
【问题描述】:

我正在尝试通过文本框在我的数据库表中插入日期。但即使我将字符串转换为日期时间,我仍然会收到此错误:

“将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围”。

我在我的数据库中采用了日期时间数据类型。这是我的代码:

try
{
    SqlCommand cmd = new SqlCommand(@"INSERT INTO tblProject(project_starting_date,project_ending_date)values(@projectstartingdate,@projectendendingdate)", objconn);
    //cmd.Parameters.AddWithValue("@projectstartingdate", DateTime.Parse(txtStartingdate.Text).ToString());
    //cmd.Parameters.AddWithValue("@projectendendingdate", DateTime.Parse(txtProjectendingdate.Text).ToString());
    DateTime stdate;
    if(DateTime.TryParse(txtStartingdate.Text, out stdate))
    {
        //cmd.Parameters.AddWithValue("@projectstartingdate",stdate);
        SqlParameter projstrtdate = new SqlParameter("@projectstartingdate", SqlDbType.DateTime);
        projstrtdate.Value = stdate;
        cmd.Parameters.Add(projstrtdate);
    }
    DateTime enddate;
    if (DateTime.TryParse(txtProjectendingdate.Text, out enddate))
    {
        //cmd.Parameters.AddWithValue("@projectendendingdate", enddate);
        SqlParameter projenddate = new SqlParameter("@projectendendingdate", SqlDbType.DateTime);
        projenddate.Value = enddate;
        cmd.Parameters.Add(projenddate);
    }
    if (objconn.State == ConnectionState.Closed)
    {
        objconn.Open();
    }
    norowaffected = cmd.ExecuteNonQuery();
    objconn.Close();
}
catch (Exception ex)
{
    Response.Write( ex.ToString());
}

请指导我哪里做错了?

【问题讨论】:

  • 与您的列关联的类型有哪些?该错误似乎表明它们是nvarchar 列.. 而不是您所期望的datetime。向我们展示您的表的定义。
  • @Simon:我的数据库字段是-project_starting_date(datetime,null) project_ending_date(datetime,null)

标签: c# asp.net sql datetime


【解决方案1】:

可能您的语言环境配置正试图将数据字符串转换为错误的意外格式。

尝试以下方法:

if(DateTime.TryParse(txtStartingdate.Text, out stdate)
{
    SqlParameter projectStartingDateParam = new SqlParameter("@projectstartingdate", SqlDbType.DateTime);
        projectStartingDateParam.Value = stdate;
    cmd.Parameters.Add(projectStartingDateParam);
}

对“projectendingdate”做同样的事情。创建 SqlDbType 等于 SqlDbType.DateTime 的 SqlParameter 并将其添加到查询命令(cmd 变量)中。

如果这不起作用,请仔细检查您的表结构是否为 DateTime 格式。 通过 SQL Server Management Studio 直接手动插入数据库。

【讨论】:

  • 是的,我在我的 sql server 中将数据类型作为日期时间。
  • 答案的代码也不起作用?或者你还没来得及测试?
  • 按照您的建议进行操作后,我仍然遇到同样的问题。请给我建议一些其他的选择。我还手动将数据输入到我的数据库表中,插入后我再次尝试通过代码插入。但问题依然存在。
  • 请检查我的问题中的代码我已经更新了我的问题。
  • 抱歉这么晚回复的朋友。我已按照您的建议更新了我在问题中发布的代码。请检查。如果我需要对我的代码进行任何更改,请指导我。
【解决方案2】:

我之前也遇到过同样的问题。我通过删除数据库中的相应列并使用正确的格式“so date time for you”重新创建它来修复它。问题已解决。 数据库中似乎还有信息告诉它以前是什么格式。

【讨论】:

  • 我什至尝试截断我的表,然后再次插入该值。但它仍然反映了同样的错误。
猜你喜欢
  • 2016-10-22
  • 2017-03-31
  • 2012-04-16
  • 2014-04-19
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多