将varchar数据类型转换为datetime数据类型会导致asp.net中的值超出范围

时间:2015-01-29 20:20:35

标签: c# asp.net datetime

我的表格中有一列数据类型datetime,我想将一个文本框中的日期值插入到表格中,但我收到此错误:

  

将varchar数据类型转换为日期时间数据类型会导致超出范围的值

这是我的代码:

string prfer_date = txtDT_Particip.Text;
int userId = 0;
string constr = ConfigurationManager.ConnectionStrings["mycon"].ConnectionString;

using (SqlConnection con = new SqlConnection(constr))
{
    using (SqlCommand cmd = new SqlCommand("Insert_User"))
    {
        using (SqlDataAdapter sda = new SqlDataAdapter())
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@FullName", txtFName.Text.Trim());
            cmd.Parameters.AddWithValue("@PreferredDateStart", prfer_date.ToString());
        }
     }
 }

prfer_date失败了。谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

我在你的问题中遗漏的一件事是prefer_date是字符串类型。 AddwithValue从字段类型推断出类型,因此在SQL结束时它会将其视为nvarchar,因此会将错误视为cmd.Parameters.Add(new SqlParameter("@PreferredDateStart", SqlDbType.DateTime) { Value = prefer_date }); 。你需要的是:

AddWithValue

或者您可以将字符串解析为DateTime对象,然后使用cmd.Parameters.AddWithValue("@PreferredDateStart",DateTime.Parse(prefer_date)); ,如:

prefer_date

考虑DateTime.Parse包含{{1}}可以成功解析的值。

答案 1 :(得分:0)

SQL Datetime的范围是" 1753年1月1日到9999年12月31日"

如果你在SQL中做这样的事情:

select convert(datetime, '1665-01-01 00:00:00')

然后你得到错误:

  

将varchar数据类型转换为日期时间数据类型会导致超出范围的值。