Динамический запрос SQL вызывает ошибку «Незакрытая кавычка» - PullRequest
1 голос
/ 02 сентября 2011

Я получаю эту ошибку:

Незакрытая кавычка после символьной строки ''.

Со следующим кодом:

lSQL = "DELETE FROM tblCourses where courseCode='" + aCourseCode + "'";

Где lSQL - локальная переменная, а aCourseCode - значение хранилища. Есть предложения?

Ответы [ 3 ]

17 голосов
/ 02 сентября 2011

Вы должны всегда использовать параметризованные запросы, иначе ваш код подвержен ошибкам, таким как тот, который вы получаете, и еще хуже - атакам SQL-инъекций. Никогда не использует конкатенации строк, как в вашем коде, при построении SQL-запросов. Вот правильный путь:

using (var conn = new SqlConnection(ConnectionString))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    cmd.CommandText = "DELETE FROM tblCourses WHERE courseCode = @courseCode";
    cmd.Parameters.AddWithValue("@courseCode", aCourseCode);
    int deletedRowsCount = cmd.ExecuteNonQuery();
}

Это гарантирует, что даже если переменная aCourseCode содержит некоторые экранирующие и опасные символы, они будут правильно обрабатываться.

0 голосов
/ 02 сентября 2011

Возможно, в переменной aCourseCode есть одинарная или двойная кавычка.

0 голосов
/ 02 сентября 2011

Лучший способ отформатировать строки - использовать что-то вроде этого:

lSQL = String.Format("DELETE FROM tblCourses where courseCode='{0}'", aCourseCode);

Также убедитесь, что в вашей переменной aCourseCode нет встроенных двойных или одинарных кавычек.

Надеюсь, это поможет.

...