0

我正在尝试将 asp.net 中日历中的选定日期插入 Microsoft SQL 数据库。

当我选择时间喜欢01/04/2012它的工作时,但是当我尝试插入时,30/01/2012我收到了消息:

将 char 数据类型转换为 datetime 数据类型会导致 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();

知道如何解决吗???

4

2 回答 2

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

于 2013-02-07T08:00:01.170 回答
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);
于 2013-02-07T07:52:53.510 回答