2013-12-14 2 views
0
private void btnSave_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       if (_action == "edit") 
       { 
        update(_id, int.Parse(cbSupplier.ValueMember), dtpTRXdate.Value.ToString("yyyy-MM-dd"), dtpDUEdate.Value.ToString("yyyy-MM-dd"), txtRemarks.Text.ToString(), _conn); 
       } 
       else 
       { 
        insert(int.Parse(cbSupplier.ValueMember), dtpTRXdate.Value.ToString("yyyy-MM-dd"), dtpDUEdate.Value.ToString("yyyy-MM-dd"), txtRemarks.Text.ToString(), _conn); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

public void insert(int sup_ID, string TRX_date, string DUE_date, string remarks, MySqlConnection conn) 
     { 
      MessageBox.Show(sup_ID.ToString() + " " + TRX_date + " " + DUE_date + " " + remarks); 

      MySqlCommand command = new MySqlCommand(); 

      command.Connection = conn; 
      command.CommandText = "INSERT INTO PO_HEADER VALUES(null," + sup_ID + ",'" + TRX_date + "','" + DUE_date + "','" + remarks + "')"; 

      command.ExecuteNonQuery(); 
     } 

public void update(int id, int sup_id, string trx_date, string due_date, string remarks, MySqlConnection conn) 
     { 
      MySqlCommand command = new MySqlCommand(); 

      command.Connection = conn; 
      command.CommandText = "UPDATE PO_HEADER SET SUPPLIER_ID=" + sup_id + ", TRX_DATE='" + trx_date + "', DUE_DATE='" + due_date + "', REMARKS='" + remarks + "' WHERE ID=" + id; 

      command.ExecuteNonQuery(); 
     } 

dtpTRXdate가있는 DateTimePicker
상기 문제의 올바른 형식 C#을있는 DateTimePicker에 없었다 -dd ")
버튼을 클릭하여 저장하고 함수를 실행하면"입력 문자열이 올바른 형식이 아닙니다 "라고 말합니다.
messagebox 문자열이 참입니다 (예 :"2012-12-12 "
). 생각???입력 문자열은

+1

당신은 디버깅을위한 메시지 상자를 사용하지 않아야 사용. 대신 내장 된 디버거를 사용하는 방법을 배우면 이와 같은 문제를 발견하는 데 훨씬 좋은 시간을 갖게됩니다. – Yuck

답변

0

문제 : 당신은 yyyy-MM-ddstring로 변환 한 후 DateTimePicker 컨트롤에서 선택한 Date 값을 보내고 있지만, database 테이블에 datatypeDate 수 있습니다 것은 그래서 Date and Time 모두 걸립니다.

해결 방법 : 대신에만 Date로 변환하는 Date and Time에로 DateTimePicker 컨트롤에서 선택한 Date 변환해야합니다.

이 시도 :

dtpTRXdate.Value.ToString("yyyy-MM-dd HH:mm:ss") 

제안 사항 :parameterised queries를 사용하여 당신이 기본적으로 처리 될 것으로 전달되는 types에 대해 걱정할 필요가 없습니다. parameterised queries 사용하여

당신은 SQL Injection Attacks

전체 코드를 방지 할 수 있습니다parameterised queries

private void btnSave_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (_action == "edit") 
      { 
       update(_id, int.Parse(cbSupplier.ValueMember), dtpTRXdate.Value, dtpDUEdate.Value, txtRemarks.Text.ToString(), _conn); 
      } 
      else 
      { 
       insert(int.Parse(cbSupplier.ValueMember), dtpTRXdate.Value, dtpDUEdate.Value, txtRemarks.Text.ToString(), _conn); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

public void insert(int sup_ID, DateTime TRX_date, DateTime DUE_date, string remarks, MySqlConnection conn) 
    { 
     MessageBox.Show(sup_ID.ToString() + " " + TRX_date.ToShortDateSTring() + " " + DUE_date.ToShortDateSTring() + " " + remarks); 

     MySqlCommand command = new MySqlCommand(); 

     command.Connection = conn; 
     command.CommandText = "INSERT INTO PO_HEADER VALUES(@value1,@sup_ID,@TRX_date,@ DUE_date,@remarks)"; 
     command.Parameters.AddWithValue("@value1",DBNull.Value); 
     command.Parameters.AddWithValue("@sup_ID",sup_ID); 
     command.Parameters.AddWithValue("@TRX_date",TRX_date); 
     command.Parameters.AddWithValue("@DUE_date",DUE_date); 
     command.Parameters.AddWithValue("@remarks",remarks); 
     command.ExecuteNonQuery(); 
    } 

public void update(int id, int sup_id, string trx_date, string due_date, string remarks, MySqlConnection conn) 
    { 
     MySqlCommand command = new MySqlCommand(); 

     command.Connection = conn; 
     command.CommandText = "UPDATE PO_HEADER SET [email protected]_id,[email protected]_date,[email protected]_date,[email protected] WHERE [email protected]"; 

     command.Parameters.AddWithValue("@sup_ID",sup_ID); 
     command.Parameters.AddWithValue("@trx_date",trx_date); 
     command.Parameters.AddWithValue("@due_date",due_date); 
     command.Parameters.AddWithValue("@remarks",remarks); 
     command.Parameters.AddWithValue("@sup_ID",id); 
     command.ExecuteNonQuery(); 
    } 
+0

그게 유용합니다. – Zenithxm