Получение неправильного синтаксиса, близкого к ошибке с SqlDataReader

У меня ошибка, и я не знаю, что не так с кодом, поэтому, если кто-нибудь может мне помочь, я был бы благодарен.

Ошибка:

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

и выделенная строка

rdr = cmd.ExecuteReader();

Код:

cn.Open();
string query = "SELECT * FROM dbo.ispiti WHERE poID=@poID, sgID=@sgID, npID=@npID";

SqlCommand cmd = new SqlCommand(query, cn);

cmd.Parameters.AddWithValue("@poID", pr);
cmd.Parameters.AddWithValue("@sgID", pr1);
cmd.Parameters.AddWithValue("@npID", pr2);

SqlDataReader rdr;

try
{
    rdr = cmd.ExecuteReader();

    if (rdr.Read())
    {
        MessageBox.Show("Well done!");
    }
}
catch(exception ex)
{
    MessageBox.Show("Error!");
}
finally
{
    cn.Close();
}

person oljko    schedule 17.06.2015    source источник


Ответы (2)


В вашем операторе SQL есть ошибка. Вы должны изменить

string query = "SELECT * FROM dbo.ispiti WHERE poID=@poID, sgID=@sgID, npID=@npID";

to

string query = "SELECT * FROM dbo.ispiti WHERE poID=@poID AND sgID=@sgID AND npID=@npID";
person Chui Tey    schedule 17.06.2015
comment
M8 вам потребовалась 1 минута, чтобы решить мою проблему, над которой я работаю весь день. Я пропустил часть инструкции SQL и искал проблему в другом месте :) Большое спасибо, я дам вам правильный ответ через 12 минут (сайт не позволяет мне принять ответ раньше). - person oljko; 17.06.2015

Запятую нельзя использовать в предложении WHERE. Вам нужно использовать логические операции, такие как AND или OR, например;

WHERE poID=@poID AND sgID=@sgID AND npID=@npID

После этого предложения следует условие поиска и нет синтаксиса для запятой.

Кстати, используйте using инструкцию для удаления ваших подключений, команд и читателей. автоматически вместо того, чтобы вызывать Dispose или Close методы вручную.

Также не используйте метод AddWithValue. может < / em> иногда приводят к неожиданным результатам. Используйте Add перегрузки метода, чтобы указать тип параметра и его размер.

person Soner Gönül    schedule 17.06.2015