C# 如何通过ASP.net在SQLServer中存储文本框中的日期

C# 如何通过ASP.net在SQLServer中存储文本框中的日期,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我在通过C asp.net在线将日期存储到sql server数据库时遇到问题 我在asp文件中使用asp文本框和asp日历扩展程序从用户处获取日期 <asp:TextBox runat="server" ID="txt_date"></asp:TextBox> <asp:CalendarExtender runat="server" ID="cal_date" TargetControlID="txt_date"></asp:CalendarExte

我在通过C asp.net在线将日期存储到sql server数据库时遇到问题

我在asp文件中使用asp文本框和asp日历扩展程序从用户处获取日期

 <asp:TextBox runat="server" ID="txt_date"></asp:TextBox>
<asp:CalendarExtender runat="server" ID="cal_date" TargetControlID="txt_date"></asp:CalendarExtender>
问题是,当我选择任何月份中少于12个的日期时,它工作得非常好, 但当date/day大于任何月份的12时,则会出现错误

Exception Details: System.FormatException: String was not recognized as a valid DateTime.
我已经尝试了.toString和MMM yyyy的所有组合

请帮忙 提前感谢

使用此:

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

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();

问题似乎来自这里:Convert.ToDateTimetxt\u dob.Text。这种类型的转换不好,因为:

它忽略控件使用的格式。转换。ToDateTime。。。希望字符串采用特定格式,以便正确解析它。这无法处理txt_dob可以使用的任何自定义格式

它不知道特定于区域性的格式。在内部,转换.ToDateTime。。。可能会坚持使用CultureInfo.CurrentCulture,这并不是说它能够解析日期。此外,.NET中的一些前端控件识别并使用浏览器为web应用传递的客户端区域性,并且该区域性可能与服务器区域性不同。CultureInfo.CurrentCulture将表示服务器端区域性,可能会出现格式差异

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


您还可以使用类似案例的一些附加信息进行检查,例如您的

User DateTime.ParseExact代替Convert.ToDateTime方法

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

}
太长,读不下去了您使用了错误的日期时间格式。 这里有很多问题会让死亡之星爆炸,从左到右,从中

首先,您正在动态创建sql查询—这可能是过去10年来最大的一次拒绝,而且每个人都停止了这样做。换句话说,请不要开始做非常过时的ADO.NET编程来将数据从网站传递到数据库。现代的替代品,如实体框架,NHibernate,甚至Linq2Sql,如果你绝望的话

好吧,尽管如此,还是让我们试着回答你的问题吧

原因是您以错误的格式传递值。你先约会。您的sql server可能希望它能提前几个月完成。因为它可能被设置为样式121试试这个

mycom = new SqlCommand("insert into mytable(dtCol1) values(@value1)");
mycom.Parameters.AddWithValue("@value1",Convert.ToDateTime(txt_dob.Text));
mycom.ExecuteNonQuery();
[出生日期]='+Convert.ToDateTimeTxtDate\u Of_Birth.Text.ToStringMM-dd-yyyy+'


sqlserver接受MM/dd/yyyy格式的日期时间,但不接受dd/MM/yyyy格式的日期时间,这将有助于解决错误原因。

在txt\u-Dob中写入日期时间值时使用的格式如果您在12日以上的天数出现问题,则表示您的日期格式错误,将月份存储为一天,反之亦然。检查要发送到SQL的确切格式。最好使用参数而不是胶粘的quries-这是一个坏习惯,你可能会冒SQL注入的风险。谢谢@Rajeev Kumar-它采用日历扩展程序的默认时间格式,即mm dd YY,我不相信有人没有意识到他/她正在使用friggin laser SqlCommand动态编写SQL!!嘿,谢谢Rajeev,你能告诉我DateTime中的'strDate'和'format'是什么吗;在将dt插入sql之前,请检查dt在调试时是否获得了正确的日期时间值。您是否在此处遇到任何问题。-1表示未使用参数化sql。这种方法对sql注入非常开放attacks@JonP我已经更新了参数化查询的答案。现在希望它对您有意义:这个答案比公认的答案更有效:-
dateString = "12-31-2012";
format = "MM-dd-yyyy";
try 
{
  DateTime result = DateTime.ParseExact(dateString, format, CultureInfo.CurrentCulture);
}
catch (FormatException) 
{

}
SELECT CAST('2013-02-08 09:53:56.223' as DateTime)
mycom = new SqlCommand("insert into mytable(dtCol1) values(@value1)");
mycom.Parameters.AddWithValue("@value1",Convert.ToDateTime(txt_dob.Text));
mycom.ExecuteNonQuery();