2014-10-09 112 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