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 に答える