我知道这是一个常见的错误,但我需要解释一下最好的解决方法。
我有一个用于存储出生日期的日期选择器。
的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。
答案 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;