我有一个ASP.NET向导,用户填写其个人详细信息,并将文本框的值插入到MS SQL记录中。 但是,插入记录时,我收到以下错误:
SQL Server错误#241:转换日期和/或时转换失败 来自字符串的时间
代码:
string insertSQL;
insertSQL = "INSERT INTO member (";
insertSQL += "UserId, mem_dob,) ";
insertSQL += "VALUES (";
insertSQL += "@UserId, @mem_dob";
insertSQL += ")";
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(insertSQL, con);
//Add the parameters.
cmd.Parameters.AddWithValue("@UserId", providerIdKeyString);
cmd.Parameters.AddWithValue("@mem_dob", DateOfBirth.Text);
任何想法都是最好的解决方法吗?我不应该使用文本框而是其他东西吗? 我想保持网络表单简单 - 它验证日期确定,所以认为日期应该有效。
由于
答案 0 :(得分:0)
您只需将Text
解析为有效的DateTime
。
cmd.Parameters.AddWithValue("@mem_dob", DateTime.Parse(DateOfBirth.Text));
http://msdn.microsoft.com/en-us/library/1k1skd40%28v=VS.100%29.aspx
当然,您应该已经验证输入的“日期”在此阶段有效。
答案 1 :(得分:0)
根据SQL,在文本框中输入的日期是无效的日期。在尝试将日期添加为参数之前,请先检查其有效性。 e.g。
DateTime myDate;
if(textBox1.TryParse(DateOfBirth.Text, out myDate))
{
// Date is valid.
} else
{
// Take corrective actions to fix the date.
}
只是尝试解析日期而不知道它是否有效会使您的应用程序失败,因为您根本不应该信任用户输入有效日期。
答案 2 :(得分:0)
DateTime t;
String Date = String.Empty;
if (DateTime.TryParse(Date, out t))
{
cmd.Parameters.AddWithValue("@mem_dob", t);
}
答案 3 :(得分:0)
您必须创建包含三个下拉控件的简单用户控件 - 日,月和年以及设置/获取日期的公共属性/方法。您可以考虑ASP.NET Ajax控件。
如果您想使用Textbox
,请通过CompareValidator
控件或某种JavaScript和正则表达式限制用户输入。
要解析日期字符串,请使用DateTime.TryParse或DateTime.ParseExact(DateTime.TryParseExact)方法。
string[] inputFormat = {"dd-MM-yy","dd/mm/yy","dd-MMM-yyyy"};
string userDate = "31-12-11";
DateTime date;
if (DateTime.TryParseExact(userDate,
inputFormat,
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out date))
{
//valid
}