2016-04-22 41 views
0

私は、日付の範囲内にある別の表に詳細を追加する必要があります。これらの日付はテキストボックスから読み取られます。MySql.Data.MySqlClient.MySqlException:日付時刻の値が正しくありません

しかし、私はエラーを取得しています:

"An exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dll but was not handled in user code 
Additional information: Incorrect datetime value: '11/25/2015 12:00:00 AM' for column 'debissuedate' at row 1" 

最初の表には、フィールドを持つt_bondridappです:ID、cancode、canname、debissuedate ...など そして私は名前の新しいものにこのテーブルからコピーする必要がありますフィールドとbondlocalとして: bondid、cancode、canname、bonddate。 は私が... plsは私を助けて

+0

脇に、自動的に実装されたプロパティを調べる必要があります。あなたのコードは、機能の変更なしにはるかに短くて済みます。 –

+0

あなたはそれを助けることができます..あなたは –

+0

何を自動的に実装されたプロパティを使用してですか?彼らについての情報を見つけるために検索するだけで、明らかになるはずです。 –

答えて

2

をコード

public class DBConnection 
     { 
      private DBConnection() 
      { 

      } 
      private string dbname = string.Empty; 
      public string DBName 
      { 
       get { return dbname;} 
       set { dbname = value;} 

      } 
      public string Password { get; set; } 
      private MySqlConnection mycon = null; 
      public MySqlConnection Connection 
      { 
       get { return mycon; } 
      } 
      private static DBConnection _instance = null; 
      public static DBConnection Instance() 

      { 
       if(_instance==null) 
        _instance=new DBConnection(); 
       return _instance; 
      } 
      public bool IsConnect() 
      { 
       bool result = true; 
       if(mycon==null) 
       { 
        if (String.IsNullOrEmpty(dbname)) 
         result = false; 
        string constr = string.Format("server=localhost;user id=root;password=mysql;database=pnys;",dbname); 
        mycon = new MySqlConnection(constr); 
        mycon.Open(); 
        result = true; 
       } 
       return result; 
      } 
      public void Close() 
      { 
       mycon.Close(); 
      } 
     } 




     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 



     protected void Button1_Click1(object sender, EventArgs e) 
     { 
      MySqlDateTime fdate =new MySqlDateTime(DateTime.Parse(TextBox3.Text)); 
      MySqlDateTime sdate = new MySqlDateTime(DateTime.Parse(TextBox4.Text)); 
      var dbCon = DBConnection.Instance(); 
      dbCon.DBName = "pnys"; 
      if (dbCon.IsConnect()) 
      { 
       string query = "INSERT INTO bondlocal (cancode,canname,bonddate) SELECT t_bondridapp.cancode,t_bondridapp.canname,t_bondridapp.debissuedate FROM t_bondridapp WHERE debissuedate>='" + fdate + "'AND debissuedate<='" + sdate + "'"; 
       MySqlCommand cmd = new MySqlCommand(query, dbCon.Connection); 

       cmd.ExecuteNonQuery(); 

      } 
      Server.Transfer("ReportBonds.aspx"); 
     } 

を使用しました基本的には、問題は、データベースにパラメータを渡している方法です。あなたはMySqlDateTimeを自分で作成する必要はありません - ちょうどパラメータ化SQLを使用して、それは問題ないはずです。

// TODO: Use a date/time control instead of parsing text to start with 
DateTime fdate = DateTime.Parse(TextBox3.Text); 
DateTime sdate = DateTime.Parse(TextBox4.Text); 

string query = @"INSERT INTO bondlocal (cancode,canname,bonddate) 
     SELECT t_bondridapp.cancode,t_bondridapp.canname,t_bondridapp.debissuedate 
     FROM t_bondridapp 
     WHERE debissuedate >= @fdate AND debissuedate <= @sdate"; 
using (var command = new MySqlCommand(query, dbCon)) 
{ 
    command.Parameters.Add("@fdate", MySqlDbType.Datetime).Value = fdate; 
    command.Parameters.Add("@sdate", MySqlDbType.Datetime).Value = sdate; 
    command.ExecuteNonQuery(); 
} 

基本的に、あなただけの文字列連結を使用して、SQL内決して特定の値必要があります。パラメータ化されたSQLは、SQLインジェクション攻撃や変換の問題を防ぎ、コードの可読性を向上させます。それを作るために、接続プールに依存している - 余談として

(、私はあなたの現在の接続の共有を捨てるためにあなたを促す、と常に代わり作成し、新しいMySqlDbConnectionを開き、操作の終了時に、それを処分するでしょう効率的です。)

+0

ありがとうございました。私はそれを試してみましょう –

+0

卿しかし、何の意味は、 "接続"( "varコマンド=新しいMySqlCommand(クエリ、conn)を使用して" conn "によって" conn ") –

+0

@SachithParameswaran:データベース接続。 'conn'は' dbCon'よりもデータベース接続を参照する変数のより一般的な名前ですが、私はその答えを修正しました。 –

関連する問題