[英]C# - MySQL syntax error for INSERT into DB
我在程序中遇到MySqlException錯誤。 這是一個簡單的測試程序,我試圖將帶有時間戳的日志錯誤插入數據庫的表中。
// -------------程序----------------------
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();
// ------------結束程序------------------
我收到以下錯誤:
“您的SQL語法有錯誤;請查看與您的MySQL服務器版本相對應的手冊,以在'key'附近使用正確的語法VALUES('2013-09-13','16:21:15 PM',' Sample Log Error',1379103676,第11行的'11111'
單詞KEY是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語句 ,僅需一個try catch
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);
}
這樣,您可以正確處理極端情況(無法打開連接,無法執行命令),並且當代碼從右括號中流出時,您的連接將被正確關閉和處理。
key
是保留字,將其包裝在反引號中,以便MySQL知道您在談論列名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.