powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ошибка в Sql-запросе в C#
21 сообщений из 21, страница 1 из 1
Ошибка в Sql-запросе в C#
    #38966869
MakoMaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, плиз.
MS VisualStudio 2013 выдает ошибку Incorrect syntax near FNS в запросе
Код: c#
1.
cmd.CommandText = "SELECT COUNT (*) FROM Lecturers WHERE [DepartmentID]=" + departmentID + " [FNS]='" + name + "'  [AcademicDegree]='" + degree + "'";


Много чего перепробывал, ничего не помогает, может кто-нибудь подскажет, в чем дело
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966872
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MakoMaxx,

дело в том, что нужно использовать параметры, а не конкатенацию строки для формирования запроса
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966873
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процитирую - "откройте для себя параметры" :)
Ну и условия в WHERE нужно чем-то соединять... OR или AND ... что там у вас за логика...
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966879
MakoMaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо)
Воспользовавшись советами, переписал с параметрами:
Код: c#
1.
2.
3.
4.
5.
6.
7.
cmd.CommandText = "SELECT COUNT (*) FROM Lecturers WHERE [DepartmentID]= @dID AND [FNS]='@name' AND [AcademicDegree]='@degree'";
cmd.Parameters.Add("@dID", SqlDbType.Int);
cmd.Parameters["@dID"].Value = departmentID;
cmd.Parameters.Add("@name", SqlDbType.NVarChar,50);
cmd.Parameters["@name"].Value = name;
cmd.Parameters.Add("@degree",SqlDbType.NChar,10);
cmd.Parameters["@degree"].Value = degree



Теперь возникла новая ошибка
Invalid column name 'FNS'

Бегло просмотрел Гугл по этой ошибке - решения не нашел
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966898
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А решения тут и нет, да и гуглить бессмысленно. Ну нету столбца FNS в таблице Lecturers, что ж поделаешь.

Кстати, параметры не надо брать в кавычки, ибо это будет текстовый литерал, а не параметр
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966934
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и для простых случаев параметров (а у ТС они именно такие) нужно использовать SqlCommand.Parameters.AddWithValue - с типами (SqlDbType) параметров этот метод разберется сам.
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966957
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
MakoMaxx
Код: c#
1.
cmd.CommandText = "SELECT COUNT (*) FROM Lecturers WHERE [DepartmentID]=" + departmentID + " and [FNS]='" + name + "'  and [AcademicDegree]='" + degree + "'";



Но правильный путь
Roman MejtesMakoMaxx,

дело в том, что нужно использовать параметры, а не конкатенацию строки для формирования запроса
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966960
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Извините, ответил не глядя на другие ответы
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966962
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
MakoMaxx
Код: c#
1.
cmd.CommandText = "SELECT COUNT (*) FROM Lecturers WHERE [DepartmentID]= @dID AND [FNS]='@name' AND [AcademicDegree]='@degree'";


При использовании параметров не надо ставить одинарные кавычки

Код: c#
1.
cmd.CommandText = "SELECT COUNT (*) FROM Lecturers WHERE [DepartmentID]= @dID AND [FNS]=@name AND [AcademicDegree]=@degree";
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966965
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сон Веры Павловнынужно использовать SqlCommand.Parameters.AddWithValue
Не путайте новичков! AddWithValue не указывает тип!

Если хочется сразу указать и тип, и значение присвоить, то надо использовать Add с Value

Код: c#
1.
SqlParameter param = command.Parameters.Add("@Description", SqlDbType.NVarChar).Value="Попка дурак";



https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.add(v=vs.110).aspx
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966984
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Не путайте новичков! AddWithValue не указывает тип!
Вот эта фраза:
Сон Веры Павловныс типами (SqlDbType) параметров этот метод разберется сам.
как бы и подразумевает, что тип указывать не нужно - тип параметра в базе метод выведет сам из значения. Кто-то из новичков понял эту фразу как-то по-другому?
Cat2Если хочется сразу указать и тип, и значение присвоить, то надо использовать Add с Value

Код: c#
1.
SqlParameter param = command.Parameters.Add("@Description", SqlDbType.NVarChar).Value="Попка дурак";



https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.add(v=vs.110).aspx
И только исключительно его? Я, например, делаю вот так:
Код: c#
1.
sqlCommand.Parameters.AddWithValue("@Description", "Попка дурак").SqlDbType = SqlDbType.NVarChar;
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966994
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сон Веры ПавловныИ только исключительно его? Я, например, делаю вот так:
Код: c#
1.
sqlCommand.Parameters.AddWithValue("@Description", "Попка дурак").SqlDbType = SqlDbType.NVarChar;


Можно и так. Но это не лучшая практика всегда и везде

Ваш код -
Код: c#
1.
2.
3.
4.
5.
6.
7.
for (int i=0: i< 10; i++)
{
sqlCommand.Parameters.Clear();
sqlCommand.Parameters.AddWithValue("@Description", "Попка дурак");
sqlCommand.Parameters.AddWithValue("@ID", i);
sqlCommand.Execute ... ;
}


Мой код

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
sqlCommand.Parameters.Add("@Description", SqlDbType.NvarChar, 512).Value = "Попка дурак";
sqlCommand.Parameters.Add("@ID", SqlDbType.Int );

for (int i=0; i< 10; i++)
{
sqlCommand.Parameters["@ID"].Value=i;
sqlCommand.Execute ... ;
}
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966996
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Ваш код -
Код: c#
1.
2.
3.
4.
5.
6.
7.
for (int i=0: i< 10; i++)
{
sqlCommand.Parameters.Clear();
sqlCommand.Parameters.AddWithValue("@Description", "Попка дурак");
sqlCommand.Parameters.AddWithValue("@ID", i);
sqlCommand.Execute ... ;
}



Не угадали. Мой код -
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
sqlCommand.Parameters.AddWithValue("@Description", "Попка дурак");
SqlParameter intParameter;
(intParameter = sqlCommand.Parameters.AddWithValue("@ID", DBNull.Value)).SqlDbType = SqlDbType.Int;
for(var i=0;i<100;i++)
{
  intParameter.Value = 1;
  sqlCommand.ExecuteNonQuery();
}


- для стринговых параметров указание SqlDbType.NVarChar избыточно, т.к. они таковыми являются по умолчанию (оно было бы нужно, если бы для нас был критичен тип VarChar, например - иначен возможны коллизии сравнения и сортировки). А для постоянно используемого параметра я предпочитаю иметь постоянную ссылку в виде переменной, а не заставлять CLR постоянно искать этот параметр в коллекции (это не говоря о том, что приведенный код неоптимален - здесь нужно использовать UDTT, и вот в этом случае без Parameters.Add не обойтись, да).
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38966997
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя вот это - выпендрёж:
Сон Веры Павловны
Код: c#
1.
2.
SqlParameter intParameter;
(intParameter = sqlCommand.Parameters.AddWithValue("@ID", DBNull.Value)).SqlDbType = SqlDbType.Int;


по большому счету, вполне хватило бы
Код: c#
1.
var intParameter = sqlCommand.Parameters.AddWithValue("@ID", 0);


- неважно, что потом аналогичное значение один раз присваивается в цикле, главное, чтобы тип вывелся (а куда он денется).
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38967007
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сон Веры Павловны- для стринговых параметров указание SqlDbType.NVarChar избыточно, т.к. они таковыми являются по умолчанию (оно было бы нужно, если бы для нас был критичен тип VarChar, например - иначен возможны коллизии сравнения и сортировки). А для постоянно используемого параметра я предпочитаю иметь постоянную ссылку в виде переменной, а не заставлять CLR постоянно искать этот параметр в коллекции (это не говоря о том, что приведенный код неоптимален - здесь нужно использовать UDTT, и вот в этом случае без Parameters.Add не обойтись, да).

Я не вылизывал код для конкретного случая. Я показал разницу в использовании. Когда к месту, я и AddWithValue использую
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38967009
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сон Веры Павловны
Код: c#
1.
var intParameter


Микрософт открыла для ленивых возможность не определять тип переменной. Пишем все на var!
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38967013
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Микрософт открыла для ленивых возможность не определять тип переменной. Пишем все на var!
Это предложение похоливарить? Тема избитая и баянистая, но я не против. Я лично считаю, что код вида
Код: c#
1.
var sha1HashAlgorithm = X509SubjectKeyIdentifierHashAlgorithm.Sha1


ничуть не менее читабельным (в т.ч. в плане понимания типа переменной sha1HashAlgorithm), но на 34 символа более лаконичным, чем
Код: c#
1.
X509SubjectKeyIdentifierHashAlgorithm sha1HashAlgorithm = X509SubjectKeyIdentifierHashAlgorithm.Sha1

.
С другой стороны,
Код: c#
1.
var alg = mySecretService.GetAlghorithm();


не дает никакого понятия о типе перемменной alg: что это? этот наш X509SubjectKeyIdentifierHashAlgorithm? AsymmetricAlgorithm? SymmetricAlgorithm? CngAlgorithm? HashAlgorithm? и т.п. Вывод прост и банален: каждое средство хорошо там, где оно дает преимущества, и плохо там, где не дает преимуществ. Ну, а альтернативно одаренные при наличии любых средств найдут способ все разбить, и порезать руки.
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38967027
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
Код: c#
1.
var alg = mySecretService.GetAlghorithm();


не дает никакого понятия о типе перемменной alg: что это? этот наш X509SubjectKeyIdentifierHashAlgorithm? AsymmetricAlgorithm? SymmetricAlgorithm? CngAlgorithm? HashAlgorithm? и т.п. Вывод прост и банален: каждое средство хорошо там, где оно дает преимущества, и плохо там, где не дает преимуществ. Ну, а альтернативно одаренные при наличии любых средств найдут способ все разбить, и порезать руки.
ну не знаю, как по мне, вполне удобно, тем более, если возникли вопросы, всегда можно посмотреть, что подразумевается под var.
еще это удобно, когда например я решил заменить 1 тип на другой и для этого не надо редактировать 100500 строк кода )
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38967040
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с Dapper - меньше букв получается
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38967043
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Roman Mejtesкогда например я решил заменить 1 тип на другой и для этого не надо редактировать 100500 строк кода )
Как бы считается, что на то и классы, что бы внутри них поправить, а не в 100500 строк кода
...
Рейтинг: 0 / 0
Ошибка в Sql-запросе в C#
    #38967442
MakoMaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, разобрался)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ошибка в Sql-запросе в C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]