2014-10-09 150 views
0

我只是保持此錯誤: 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的在線使用近「2014年10月8日19時39分57秒)」正確的語法手冊1插入日期時間(從C#到MySQL)

public string ObtenerFechaHora() 
    { 
     string query = "select CURRENT_TIMESTAMP() as Fecha"; 
     OpenConnection(); 
     MySqlCommand cmd = new MySqlCommand(query, connection); 

     cmd.ExecuteNonQuery(); 
     DateTime e = (DateTime)cmd.ExecuteScalar(); 

     CloseConnection(); 
     return e.ToString("yyyy-MM-dd H:mm:ss"); 
    } 

然後我插入(「出生日期」是datetime列)

string query = "INSERT INTO actividad (idTerminal, Proceso, Nombre, Tiempo, Fecha) VALUES('" + idTerminal + "', '" + Proceso + "', '" + Nombre + "', '1,'" + this.ObtenerFechaHora() + ")"; 

我一直使用的格式戰利品和我一直有錯誤,例如:

e.ToString("yyyy-MM-dd H:mm:ss"); 
    e.ToString("yyyy-MM-dd HH:mm:ss"); 
    e.ToString("dd-MM-yyyy H:mm:ss"); 
    e.ToString("yyyy-dd-MMH:mm:ss"); 

而且用 「/」 代替 「 - 」 任何幫助嗎?

+2

,使用參數化查詢:http://stackoverflow.com/questions/652978/parameterized-query-for-mysql-with-c -sharp – sgeddes 2014-10-09 03:00:11

回答

0

您excuted兩次

//cmd.ExecuteNonQuery(); 
DateTime e = (DateTime)cmd.ExecuteScalar(); 

應該只是一個時間。

然後像@sgeddes said in the comments使用參數化查詢,他們避免錯誤和sql注入。

1

問題不在於日期時間字符串的格式;該問題出現在INSERT語句的SQL文本中,正好在附加值之前。爲了調試這個,你可以輸出查詢字符串並檢查它。

的問題是在這裏的SQL文本:

+ "', '1,'" + 

有需要是文字和下一列值之間的逗號。它看起來像你只是錯過了一個單引號:

+ "', '1','" + 
     ^

一個潛在的更大的問題是,你的代碼似乎受到SQL注入攻擊。考慮一下當你包含在SQL文本中的變量之一包含單引號或者更多的nefarios ala Little Bobby Tables時會發生什麼。 http://xkcd.com/327/

如果您希望列值爲當前日期和時間,則不需要運行單獨的查詢來獲取該值。您可以在查詢文本中簡單引用功能NOW()。例如

+ "', '1', NOW())"; 
0

您使用的方法不是編寫SQL命令的最佳方法。您應該在查詢中使用sql參數。你的代碼容易受到SQL注入攻擊,顯然這不是最好的方法。

嘗試使用這樣的事情:你再往前走之前

string commandText = "UPDATE Sales.Store SET Demographics = @demographics " 
    + "WHERE CustomerID = @ID;"; 
SqlCommand command = new SqlCommand(commandText, connection); 
command.Parameters.Add("@ID", SqlDbType.Int); 
command.Parameters["@ID"].Value = customerID; 
+0

我不認爲'SqlCommands'適用於'MySql'。至少不是以我的經驗。 – Zeliax 2016-11-01 15:10:30