2013-09-13 1 views
1

Я столкнулся с ошибкой MySqlException в моей программе. Это простая тестовая программа, в которой я пытаюсь вставить ошибки журнала с метками времени в таблицу в моей базе данных.C# - ошибка синтаксиса MySQL для INSERT в DB

// ------------- ПРОГРАММА ----------------------

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using MySql.Data.MySqlClient; 


string Log = "Sample Log Error"; 
string key = "11111"; 

string date; 
string time; 
int unixT; 
TimeSpan unix_time; 

// geting current date in yyyy-mm-dd format  
date = DateTime.UtcNow.ToString("yyyy-MM-dd"); 

//getting current time in hh:mm:ss format 
time = string.Format("{0:HH:mm:ss tt}", DateTime.Now); 

// Getting Unix Time 
unix_time = (System.DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)); 

//converting Unix time to seconds 
unixT = Convert.ToInt32(unix_time.TotalSeconds); 

MySqlConnection myConn = new MySqlConnection("Server=172.178.2.143;" +   "Port=3306;" + "Database=DB;" + "Uid=user;" + "Pwd=pass;");     

try 
{ 
    myConn.Open(); 
} 
catch (MySqlException e) 
{ 
    Console.WriteLine(e); 
}     

MySqlCommand comm1 = new MySqlCommand("INSERT INTO Logger(date_stamp,   time_stamp, log, unix_time, key) VALUES(@date_stamp, @time_stamp, @log, @unix_time, @key)", myConnection); 

//inserting each element from GPS split message into its respective table and column in the database     
comm1.Parameters.AddWithValue("date_stamp", date);    
comm1.Parameters.AddWithValue("time_stamp", time);     
comm1.Parameters.AddWithValue("log", Log);     
comm1.Parameters.AddWithValue("unix_time", unixT); 
comm1.Parameters.AddWithValue("key", key); 

try 
{ 
    comm1.ExecuteNonQuery(); //executing the INSERT Query Above 
} 

catch (MySqlException e)    
{      
    Console.WriteLine(e);     
} 

myConnection.Close(); 

// ------------ END PROGRAM ------------------

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

"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('2013-09-13', '16:21:15 PM', 'Sample Log Error', 1379103676, '11111'' at line 1"

ответ

1

Слово KEY - это reserved keyword для MySql

Если вы хотите использовать это на я в вашем коде, вам нужно добавить кавычку вокруг него

MySqlCommand comm1 = new MySqlCommand("INSERT INTO Logger(date_stamp," + 
          "time_stamp, log, unix_time, `key`) " + 
          "VALUES(@date_stamp, @time_stamp, @log, @unix_time, @key)", 
          myConnection); 

Если это не слишком поздно, в стадии разработки приложения Я предлагаю вам изменить это имя, потому что каждый раз, когда вы касаетесь этого поля вы будете иметь те же проблема запомнить.

Я хотел бы также предложить using statement вокруг вашего кода и только один попробовать поймать

try 
{ 
    using(MySqlConnection myConn = new MySqlConnection(.....)) 
    using(MySqlCommand comm1 = new MySqlCommand(......)) 
    { 
     myConn.Open(); 
     comm1.Parameters.AddWithValue("date_stamp", date);    
     ..... 
     comm1.ExecuteNonQuery(); 
    } 
} 
catch (MySqlException e)    
{      
    Console.WriteLine(e);     
} 

В этом случае вы получаете правильную обработку сценариев случае краевых (невыполнения открыть соединение, не в состоянии выполнить команду), и ваше соединение будет правильно закрыто и расположено, когда код выйдет из закрывающей скобки.

0

key зарезервированное слово, оберните его в backticks, чтобы MySQL знал, что вы говорите о имени столбца.

Смежные вопросы