无法将参数值从String转换为DateTime

时间:2015-10-07 06:50:38

标签: asp.net sql-server datetime datepicker

我知道这是一个常见的错误,但我需要解释一下最好的解决方法。

我有一个用于存储出生日期的日期选择器。

的DatePicker

<script>
    $(document).ready(function () {
        $(".datepicker").datepicker({
            dateFormat: "yy-mm-dd",
            changeMonth: true,
            changeYear: true,
            yearRange: "-100:-1",
            defaultDate: "-25y"
        });
    });
</script>

我将它作为参数传递给数据库,如下所示:

cmd.Parameters.Add("@DOB", SqlDbType.Date).Value = txtdob.Value;

工作得很好。 现在在编辑页面上,我将数据库中的DOB插入到日期选择器中,如下所示:

txtdob.Value = ((DateTime)rdr["DOB"]).ToString("dd-MM-yyyy");

仍然正常。我按预期看到了DOB。 现在我只需更改其他内容(例如用户的名称或城市),然后单击“更新”按钮,将DOB传递为:

cmd.Parameters.Add("@DOB", SqlDbType.DateTime).Value = txtdob.Value;

我收到错误

  

无法将参数值从String转换为DateTime。

2 个答案:

答案 0 :(得分:0)

datepicker日期格式:dateFormat: "yy-mm-dd", 但您存储在编辑((DateTime)rdr["DOB"]).ToString("dd-MM-yyyy");

所以,在更新时它无法正常工作。

yyyy-MM-dd格式适用但dd-MM-yyyy无法正常工作,这适用于某些文化格式问题。

所以,您可以尝试使用:DateTime.Parse()

cmd.Parameters.Add("@DOB", SqlDbType.DateTime).Value =
DateTime.ParseExact(txtdob.Value,
"Your_Date_Format(e.g dd-mm-yyyy)",
CultureInfo.InvariantCulture);

答案 1 :(得分:0)

您收到错误,因为如果SqlDbType.DateTime

    cmd.Parameters.Add("@DOB", SqlDbType.DateTime).Value = txtdob.Value;

您正在将字符串传递给DateTime数据类型,这就是您收到转换错误的原因。

避免将字符串传递给datetime数据类型,即使您将其转换,也无效,例如:名称:Juan ,您无法将其转换为datetime数据类型,您将收到日期格式问题,如果您尝试将字符串转换为日期时间。

如果要更正它,可以添加新的字符串参数,这样它就不会与datetime参数冲突。

类似的东西:

    cmd.Parameters.Add("@SomeStringHere", SqlDbType.Varchar).Value = txtdob.Value;

然后,您可以使用IF ELSE条件来操纵程序的流程,例如

    IF IsDate(txtdob.Value) = True Then
        cmd.Parameters.Add("@DOB", SqlDbType.DateTime).Value = txtdob.Value;
    ELSE
        cmd.Parameters.Add("@SomeStringHere", SqlDbType.Varchar).Value = txtdob.Value;