2017-09-22 14 views
0

DBに行を挿入するはずのこの簡単な方法があります。それは例外をスローしています。C#SQL文のMySQL構文エラー

private void AddToLiveQueue(int user_id, bool release = false) 
    { 
     string sql = "INSERT INTO live_support_queues (user_id, release, created_at, updated_at)"; 
     sql += " VALUES(?user_id, ?release, ?created_at, ?created_at)"; 

     MySqlConnection conn = new MySqlConnection(connString); 
     MySqlCommand cmd = conn.CreateCommand(); 
     cmd.CommandText = sql; 

     cmd.Parameters.AddWithValue("?user_id", user_id); 
     cmd.Parameters.AddWithValue("?release", release); 
     cmd.Parameters.AddWithValue("?created_at", DateTime.UtcNow); 


     try 
     { 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      conn.Close(); 
     } 
     catch (Exception ex) 
     { 
      SendEmail email = new SendEmail(); 
      email.Send(ex.Message + "  " + ex.ToString()); 
     } 
    } 

私はこのエラーを取得しています:

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'release, created_at, updated_at) VALUES(70, 0, '2017-09-22 23:00:16.686741', '20' at line 1" 

Here is the SQL columns

すべてのヘルプは大歓迎です。ありがとう!

+0

あなたはこれをデバッグする場合は、値を引き出し、データベース上に正確ステートメントを実行し、何が起こりますか? – Seano666

+0

idは自動生成され、insert文には含まれません。 user_isは自動生成されず、insert文に含まれます。 –

+0

生成されたSQLを印刷して投稿できますか?これは通常、優れたデバッグチェックです。 –

答えて

3

releaseは予約語であり、識別子として使用される場合は `記号でエスケープする必要があります。

https://dev.mysql.com/doc/refman/5.7/en/keywords.html

+0

ありがとう!それは有り難いです。 –

+0

クエリが実行されないときに、正確なクエリを抽出してテストのために実行しようとすると、すぐにそのような問題を解決するのに役立ちます –

+0

すべての識別子を ';新しい予約語が追加された場合(またはあいまいさを引き起こす可能性のあるキーワード)には、既にカバーされています。 – Uueerdo