我正在尝试将选定日期从asp.net中的日历插入Microsoft SQL数据库。
当我选择01/04/2012
时间作为其工作时,但在尝试插入30/01/2012
时,我收到了消息:
将char数据类型转换为datetime数据类型 超出范围的日期时间值。
使用datetime
创建closeDateCalender.SelectedDate
对象时,
c#中的代码是:
sb.AppendFormat("Values('{0}', '{1}' ,'{2}', '{3}','{4}','{5}','{6}','{7}')",
opportunity.UserId,
opportunity.AccountId,
opportunity.OpportunityName,
opportunity.CloseDate,
opportunity.Stage,
opportunity.Probability,
opportunity.Amount,
opportunity.Description);
String prefix = "INSERT INTO Opportunities " + "([User_Id],Account_Id,Opportunity_Name,Close_Date,Stage,Probabilty,Amount,[Description])";
command = prefix + sb.ToString();
任何想法如何解决它?
答案 0 :(得分:1)
要摆脱格式化和其他事情的所有痛苦,请使用准备好的状态或参数化查询,它将处理所有这些格式化的东西。类似的东西:
string YourSQL = "INSERT INTO Tablename(columns list) Values(?, ?, ?, ..) ";
command.Parameters.Add("CloseDate",
DbType.DateTime).Value = opportunity.CloseDate;
...
...// do the same for the rest of the fields.
这样opportunity.CloseDate
的数据类型应为DateTime
。
答案 1 :(得分:0)
您的服务器设置为接受美国格式而非欧洲格式的日期。如果您重新格式化日期,使其格式为yyyy-MM-dd
,它将起作用。
试试这个:
sb.AppendFormat("Values('{0}', '{1}' ,'{2}', '{3}','{4}','{5}','{6}','{7}')",
opportunity.UserId,
opportunity.AccountId,
opportunity.OpportunityName,
opportunity.CloseDate.ToString("yyyy-MM-dd"),
opportunity.Stage,
opportunity.Probability,
opportunity.Amount,
opportunity.Description);