如何通过C#ASP.net从SQL Server中的文本框存储日期

时间:2013-05-13 10:32:53

标签: c# asp.net sql-server

我在通过C#asp.net,在线

在sql server DB中存储日期时遇到了麻烦

我在ASP文件中使用了asp文本框和asp日历扩展程序来获取用户的日期,

 <asp:TextBox runat="server" ID="txt_date"></asp:TextBox>
<asp:CalendarExtender runat="server" ID="cal_date" TargetControlID="txt_date"></asp:CalendarExtender>

文件后面的代码是,假设连接和命令被声明并初始化,

mycom = new SqlCommand("insert into mytable(dtCol1) values('"+Convert.ToDateTime(txt_dob.Text).ToString("dd-MMM-yyyy") + "')", mycon);mycom.ExecuteNonQuery();

问题是,当我选择日期少于任何月份的12时,它的工作完美, 但是当日期/日期大于任何月份的12时,它会给出错误,

Exception Details: System.FormatException: String was not recognized as a valid DateTime.

我已经尝试过.ToString的所有组合(“dd-MMM-yyyy”)

请帮助 提前谢谢

7 个答案:

答案 0 :(得分:3)

试试这个

mycom = new SqlCommand("insert into mytable(dtCol1) values(@value1)");
mycom.Parameters.AddWithValue("@value1",Convert.ToDateTime(txt_dob.Text));
mycom.ExecuteNonQuery();

答案 1 :(得分:2)

试试这个

CultureInfo provider = CultureInfo.InvariantCulture;
System.Globalization.DateTimeStyles style = DateTimeStyles.None;
DateTime dt;
DateTime.TryParseExact(txt_dob.Text, "m-d-yyyy", provider, style, out dt);
mycom = new SqlCommand("insert into mytable(dtCol1) values(@datevalue)", mycon);
cmd.Parameters.Add("@datevalue",SqlDbType.DateTime).Value =dt;
mycom.ExecuteNonQuery();

答案 2 :(得分:2)

问题似乎来自这里:Convert.ToDateTime(txt_dob.Text)。这种类型的转换并不好,因为:

  • 它忽略控件使用的格式Convert.ToDateTime(...)期望字符串采用某种格式,以便正确解析它。这无法处理txt_dob可以使用的任何自定义格式。

  • 它不知道特定于文化的格式。在内部,Convert.ToDateTime(...)可能会坚持CultureInfo.CurrentCulture,据说无法解析日期。此外,.NET中的一些前端控件识别并使用浏览器传递的客户端文化(对于Web应用程序),并且该文化很可能与服务器文化不同。 CultureInfo.CurrentCulture将代表服务器端文化,并且可能会出现格式差异

如果您知道txt_dob.Text的格式,则必须明确解析它。在下面的示例中,我假设格式为"MM/dd/yyyy"

String dateFormat = "MM/dd/yyyy";//The format that the txt_dob control uses
DateTime parsedDate = DateTime.ParseExact(
    txt_dob.Text, dateFormat, CultureInfo.InvariantCulture);

您还可以查看this related topic以及与您类似的案例

的其他信息

答案 3 :(得分:1)

TLDR;您使用的是错误的DateTime 格式

这里有很多问题会炸毁死星,左右和中心。

首先,你正在动态创建sql查询 - 这可能是过去10年中最大的禁忌,而且每个人都停止了这样做。换句话说,请不要开始做(过时)ADO.NET编程将数据从网站传递到数据库。现在的替代品,如Entity Framework,NHibernate,甚至Linq2Sql,如果你是绝望的。

好的 - 那就是说,让我们尽量回答你的问题。

原因是因为你以错误的格式传递值。你先做日期。您的SQL服务器可能希望它首先是MONTHS。因为它可能被设置为样式121 (&lt; - 这是兼容性垃圾的真正的技术SQL服务器设置...)

但是不要试着去猜测。

让我们使用更通用的开始字符串格式: yyyy-mm-dd hh:mm:ss.ms

例如

SELECT CAST('2013-02-08 09:53:56.223' as DateTime)

你可以see this in action over at SQLFIDDLE

This is a really good StackOverflow question解释了默认的DateTime格式等等。

答案 4 :(得分:0)

使用此:

mycom = new SqlCommand("insert into mytable (dtCol1) values ('" +  Convert.ToDateTime(txt).ToString("MMM-dd-yyyy") + "')", mycon);

由于

答案 5 :(得分:0)

用户DateTime.ParseExact()代替Convert.ToDateTime()方法。

dateString = "12-31-2012";
format = "MM-dd-yyyy";
try 
{
  DateTime result = DateTime.ParseExact(dateString, format, CultureInfo.CurrentCulture);
}
catch (FormatException) 
{

}

答案 6 :(得分:0)

[Date_Of_Birth]='" + Convert.ToDateTime(TxtDate_Of_Birth.Text).ToString("MM-dd-yyyy") + "'

将帮助sqlserver以MM/dd/yyyy格式接受日期时间而不是dd/MM/yyyy中的错误原因。