2015-09-03 4 views
0

У меня проблемы с удалением строк (DELETE). Каждый раз, когда я добавляю имена столбцов в свой string sql, он показывает ошибку «Синтаксическая ошибка (отсутствующий оператор) в выражении запроса». Это мой код:Ошибка синтаксиса (отсутствующий оператор) в выражении запроса ""

OleDbConnection myCon = new OleDbConnection("provider = Microsoft.Jet.OLEDB.4.0;DataSource = '" + fileLocation + "'; Extended Properties=Excel 8.0;"); 
OleDbCommand myCmd = new OleDbCommand(); 

myCmd.Connection = myCon; 

string sql = "DELETE * FROM [" + tablename + "$] where _date = '" + full_date + "'"; 

myCmd.CommandText = sql; 
myCon.Open(); 

myCmd.ExecuteNonQuery(); 

myCon.Close(); 

Для примера моего string sql значение

"DELETE * FROM [Sheet1$] where _date = '03 09 2015'"

Было бы производить эту ошибку:

Syntax Error (missing operator) in query expression "_date = '03 09 2015'"

У меня нет никаких проблем при вставке данных в моем первенствовать файл, но когда дело доходит до удаления, это говорит об этой ошибке. Тем не менее практикующих Interop пожалуйста, голый со мной

+1

Вы не можете использовать '' * для удаления высказывания и его как 'удалить от' –

+1

Вы всегда должны использовать [параметризованные запросы] (http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death /). Этот тип конкатенаций строк открыт для [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) атак. Также столбцом '_date' должен быть тип даты/времени вместо символа IMO :. И используйте инструкцию 'using' для размещения ваших соединений и команд. –

ответ

2

Попробуйте использовать это то, удалить *, не требуется с DELETE утверждением:

string sql = "DELETE FROM [" + tablename + "$] where _date = '" + full_date + "'"; 

Кроме того, значение, которое вы получаете в full_date не кажется, чтобы быть в правильном формате. Проверьте значение, которое вы получаете в full_date, с форматом, который у вас есть в таблице.

На стороне записки:

Вы код склонен к SQL Injection. Чтобы избежать этого, вам нужно использовать подготовленную инструкцию.

+0

Что вы подразумеваете под 'full_date'? –

+0

@JoeyLorenzoPascual: - Я не уверен, но думал, что 'full_date', т.е. ваша переменная, которая содержит дату, не имеет правильного формата даты. –

1

Вы синтаксическая ошибка в запросе, пожалуйста, удалите * из вашего запроса, следовательно, ваш запрос может выглядеть следующим образом: Вы можете проверить синтаксис here:

string sql = "DELETE FROM [" + tablename + "$] where _date = '" + full_date + "'"; 

И запрос, который вы используете, откроет широкий путь для sql injection, поэтому лучше использовать вместо него параметризованные запросы.

+0

omg базовая ошибка sql. почему я об этом не подумал. Благодарю. :) –

0

вы должны попробовать

string strQuery= "DELETE FROM @TableName where _date = '@date'"; 
usin (SqlCommand cmd = new SqlCommand(strQuery)){ 

     cmd.Parameters.AddWithValue("@TableName", tablename+"$"); 
     cmd.Parameters.AddWithValue("@date", full_date); 

     myCon.Open(); 

     cmd.ExecuteNonQuery(); 

} 
+0

Да, я обязательно это рассмотрю. Спасибо –

+0

Будет ли параметр '[@TableName]' работать как 'имя таблицы'? –

+0

'cmd.Close();' плохой стиль, используйте 'using', а –

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