从asp.net中的calender到microsoft sql插入datetime的问题

时间:2013-02-07 07:49:01

标签: c# asp.net sql sql-server

我正在尝试将选定日期从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();

任何想法如何解决它?

2 个答案:

答案 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);