2014-10-09 4 views
0

Я просто сохраняю эту ошибку: У вас возникла ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с «2014-10-08 19:39:57)» в строке 1Вставить в DateTime (от 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"); 
    } 

Тогда я вставить («Fecha» является DateTime Column)

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

ответ

0

Вы excuted дважды

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

Должен быть только один раз.

Затем, как @sgeddes said in the comments, используйте параметризованные запросы, они избегают ошибок и SQL-инъекций.

1

Проблема не в формате строки datetime; проблема заключается в тексте SQL инструкции INSERT, прямо перед добавлением значения. Чтобы отладить это, вы можете выводить строку запроса и проверять ее.

Проблема заключается в тексте SQL здесь:

+ "', '1,'" + 

Там должен быть запятой между этим буквальным и следующим значением столбца. Похоже, вы просто пропустили апостроф:

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

Потенциально более серьезной проблемой является то, что ваш код оказывается уязвимой для SQL инъекций. Подумайте, что произойдет, когда одна из переменных, которые вы включаете в текст SQL, включает в себя одну цитату или что-то еще большее количество нечетких алей Little Bobby Tables. http://xkcd.com/327/.

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

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

Подход, который вы использовали, не лучший подход для написания команды SQL. Вы должны использовать sql-параметры в запросе. Ваш код уязвим для SQL Injected и, очевидно, это не лучший подход.

Попробуйте использовать что-то вроде этого:

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

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