如何在ADO.NET中使用文本框作为日期

时间:2012-01-06 12:44:50

标签: asp.net sql-server ado.net

我有一个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);

任何想法都是最好的解决方法吗?我不应该使用文本框而是其他东西吗? 我想保持网络表单简单 - 它验证日期确定,所以认为日期应该有效。

由于

4 个答案:

答案 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
            }