2016-06-28 2 views
0

私はC#プログラムを持っており、レコードを挿入するMySQLクエリを実行します。このレコードでは、クライアントのタイムスタンプではなく、サーバーのタイムスタンプでなければならないタイムスタンプフィールドがあります。 だから、私はこれを書く:MySQL C#クエリサーバーのタイムスタンプを挿入

start_session = new MySqlDataAdapter("INSERT INTO CUBE_WORKTIME(ID_WORKTIME, 
             ID_RISORSA_FK,DATA,ORA_INIZIO_EVENTO, ORA_FINE_EVENTO, 
             ID_CDC_FK, CAUSALE, LAST_EVENT) 
          VALUES ('', '"+ idrisorsa_global + "', DATE(NOW()),NOW(), 
            NULL, '"+ IDCDC +"', 'Login', 'Y')", connection); 

DataTable start_session_dataset = new DataTable(); 
start_session.Fill(start_session_dataset); 

このクエリはうまく機能し、ID_RISORSA_FKIDCDCフィールドは正しいです。しかし、日付と日時は0000-00-00と0000-00-00 00:00:00です。 引用符を追加しようとしましたが、効果はありません。

アイデア?

+0

列データとORA_INIZIO_EVENTOのdatypesは何であるかのように書き換えることができフィールドID_WORKTIMEはAUTONUMBERですか? – Steve

答えて

1

最初に変更するのは、MySqlDataAdapterを使用してレコードを挿入することだけです。これはうまくいくかもしれませんが、この作業に使用するクラスは適切ではありません。単純なMySqlCommandは、使用する正しいオブジェクトであり、インフラストラクチャの必要性はあまりありません。

2番目の変更点は、SQLクエリを作成する方法です。 sqlコマンドを作成するために文字列を連結するのではなく、パラメータを使用します。これはSql Injectionと構文解析の問題を回避します。

だからあなたのコードが

string cmdText = @"INSERT INTO CUBE_WORKTIME 
     (ID_RISORSA_FK,DATA,ORA_INIZIO_EVENTO, ORA_FINE_EVENTO,ID_CDC_FK, 
      CAUSALE, LAST_EVENT) VALUES (@risorsaID, CURDATE(), CURTIME(), 
      NULL, @cdcID, 'Login', 'Y')"; 

MySqlCommand cmd = new MySqlCommand(cmdText, connection); 
cmd.Parameters.Add("@risorsaID", MySqlDbType.Int32).Value = idrisorsa_global; 
cmd.Parameters.Add("@cdcID", MySqlDbType.Int32).Value = IDCDC; 
int rowsInserted = cmd.ExecuteNonQuery(); 
+0

「MySQL」はいつ学んだのですか?私はあなたのプロフィールでそれを見ることはありません:) – Rahul

+0

多くのプロジェクトでは、今日は少し錆びていますが、まだ... – Steve

+0

私はあなたのコードに従いますが、DBではフィールドも0000-00-00などです。 ..ここに私のテーブルhttp://imgur.com/ndX0JHaがあります。 –

関連する問題