2013-04-05 7 views
-1

Я использую mysql.Data в C# для подключения mysql. В другой программе он работал, но в настоящее время я вишу на команде INSERT INTO.C# MySql.Data INSERT INTO error

я получаю следующее сообщение об ошибке:

An unhandled exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dll 
Additional information: 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 'key) VALUES ('PGJWZBPOWTRPUTKY')' at line 1 

С помощью этого кода:

MySqlCommand Command = Connection.CreateCommand(); 
     MySqlDataReader Reader; 
     Command.CommandText = "INSERT INTO jt_teamsync (key) VALUES ('" + TeamSyncKey + "')"; 
     Connection.Open(); 
     Reader = Command.ExecuteReader(); 
     Connection.Close(); 

Спасибо за любую помощь

+0

Эта ошибка от того, что я смотрю на довольно много, если не говорит вам, что прямая ошибка .. также, что 'key' является то, что поле name..if поэтому почему не 'Alias' имя таблицы' 'INSERT INTO jt_teamsync J (j.key) VALUES ('" + TeamSyncKey + "')"; 'например – MethodMan

ответ

3

KEY является зарезервированным ключевым словом в MySQL. Он должен быть экранирован с помощью обратного одиночных кавычек,

INSERT INTO jt_teamsync (`key`) VALUES(...) 

Как Замечание, ваш запроса очень слаб. Он уязвим с SQL Injection. Параметризованных значение, чтобы избежать от него, например,

string content = TeamSyncKey; 
string connStr = "connection string here"; 
string sqlStatement = "INSERT INTO jt_teamsync (`key`) VALUES (@key)"; 
using (MySqlConnection conn = new MySqlConnection(connStr)) 
{ 
    using(MySqlCommand comm = new MySqlCommand()) 
    { 
     comm.Connection = conn; 
     comm.CommandText = sqlStatement; 
     comm.CommandType = CommandType.Text; 

     comm.Parameters.AddWithValue("@key", content); 

     try 
     { 
      conn.Open(); 
      comm.ExecuteNonQuery(); 
     } 
     catch(MySqlException e) 
     { 
      // do something with the exception 
      // do not hide it 
      // e.Message.ToString() 
     } 
    } 
} 
+0

Спасибо, сработало. Я попробовал его с помощью 'вместо 'before, но это не сработает. –

+0

приветствуется ': D' –

+0

да, потому что одинарные кавычки предназначены для строковых литералов. имена таблиц, а также имена столбцов являются идентификаторами. –