Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 1
Регистрация: 22.06.2012
Сообщений: 244

Не выполняется параметризованый запрос SELECT count(*)

21.01.2013, 13:42. Показов 2235. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Голову сломал в чем дело, чую что дело в какой-то мелочи, которая вылетела из головы.

Итак код, все казалось бы, просто.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Готовим параметризированную комманду
            OleDbCommand Command = Connector.Connection.CreateCommand(); // Связываем комманду с подключением
            Command.CommandText = "SELECT count(*) FROM @TableName"; // Задаем текст комманды
            Command.Parameters.Add("@TableName", OleDbType.Variant); // Добавляем параметр в коллекцию параметров
 
            int i = 1; // Нумерация таблиц
            int Count; // Количество записей в таблице
            foreach(DataRow Row in MyTable.Rows)
            {
                string showTable = (string)Row["TABLE_NAME"];
                Command.Parameters["@TableName"].Value = showTable ;
                Count = Command.ExecuteNonQuery();                
                Console.WriteLine("{0}. {1} ({2})", i,showTable,Count);
                i++;
            }
Код должен вывести таблицы и количество записей в них. Исключение ругается на синтаксис запроса. Пробовал менять ExecuteNonQuery() на скаляр. Ничего. При попытке после FROM вписать имя какой-то таблицы приводит к тому что код выполняется, однако в переменную Count ничего не заносится. В общем что-то с запросом, но не могу понять что именно! Почему ругается на параметр?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2013, 13:42
Ответы с готовыми решениями:

Запрос Select COUNT(*) не работает
Суть вот в чем: Я программирую на Делфи 7, сама база в Access. Я написала запрос, который должен подсчитывать количество договоров по 2м...

Запрос по NativeSQL Hibernate Select count
String sql = "SELECT books.genre, COUNT(*) AS count FROM books GROUP BY genre"; SQLQuery query= session.createSQLQuery(sql); ...

Не выполняется запрос SELECT
Собственно, задача - вставить данные в таблицу, и потом редирекнуть на страницу с этими данными. Выбранный способ - найти id...

10
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
21.01.2013, 14:00
Void-87, Здесь нужно однозначно выполнять ExecuteScalar. ExecuteNonQuery с результирующим набором вообще никаких манипуляция не делает, а у вас количество возвращается как раз в результирующим набором. Раз ругается на синтаксис запроса, значит, видимо, нельзя название таблицы передавать как параметр.
0
2 / 2 / 1
Регистрация: 22.06.2012
Сообщений: 244
21.01.2013, 14:03  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
Раз ругается на синтаксис запроса, значит, видимо, нельзя название таблицы передавать как параметр.
Название таблицы передается в формате string в любом случае. Кстати, проверял, в переменную showTable передается все верно.
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
21.01.2013, 14:15
Вам однозначно надо использовать ExecuteScalar().
Если БД представляет собой MS Access файл, то учтите, что Access не переваривает именованные параметры.
Больше, к сожалению, ничем помочь не могу.
0
2 / 2 / 1
Регистрация: 22.06.2012
Сообщений: 244
21.01.2013, 14:31  [ТС]
Цитата Сообщение от Cupko Посмотреть сообщение
Если БД представляет собой MS Access файл, то учтите, что Access не переваривает именованные параметры.
о_О Лично делал уже запросы с именованными параметрами и все проходило.
Спасибо.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
21.01.2013, 14:35
Void-87, нельзя передавать имя базы в виде параметра
0
2 / 2 / 1
Регистрация: 22.06.2012
Сообщений: 244
21.01.2013, 15:28  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
нельзя передавать имя базы в виде параметра
Передаю не имя базы, а список таблиц в этой базе (список верный 100%)

Все заработало, когда воспользовался редактирование строки запроса. В поле FROM тупо подставлял имена таблиц. Однако без использования параметров. Хочется именно с параметрами.
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
21.01.2013, 15:40
Цитата Сообщение от Void-87 Посмотреть сообщение
Передаю не имя базы, а список таблиц в этой базе (список верный 100%)

Все заработало, когда воспользовался редактирование строки запроса. В поле FROM тупо подставлял имена таблиц. Однако без использования параметров. Хочется именно с параметрами.
C#
1
Command.CommandText = "SELECT count(*) FROM ?"
Вы пробовали? Не помогает?

С добавленным параметром, естественно.
0
2 / 2 / 1
Регистрация: 22.06.2012
Сообщений: 244
21.01.2013, 15:47  [ТС]
Цитата Сообщение от Cupko Посмотреть сообщение
C#
1
Command.CommandText = "SELECT count(*) FROM ?"
Вы пробовали? Не помогает?

С добавленным параметром, естественно.
Я пробовал так
C#
1
Command.CommandText = "SELECT count(*) FROM " + showTable;
Так работает. Однако это как альтернатива.

Чем поможет тут вопрос? Он же будет запрашивать вручную параметр.
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
21.01.2013, 15:50
Цитата Сообщение от Void-87 Посмотреть сообщение
Я пробовал так
Чем поможет тут вопрос? Он же будет запрашивать вручную параметр.
Будет запрашивать первый параметр коллекции, неименованный параметр.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
21.01.2013, 16:31
В качестве параметров нельзя передавать никакую метаинформацию: имена полей, таблиц, имена хранимых процедур и т.д.
Используйте конкатенацию. Или, если это возможно, лучше делайте switch по имени таблицы, и берите заранее заготовленные запросы.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2013, 16:31
Помогаю со студенческими работами здесь

SELECT COUNT(id), COUNT(value) tbl;
SELECT COUNT(id), COUNT(value) tbl; Ошибка SQL запрос: Документация SELECT COUNT(id), COUNT(value) tbl Ответ MySQL:...

SELECT COUNT()
Здравствуйте. Есть таблица в числами 10 11 10 10 11 4 22

Select count
Имеется база данных "Библиотека" с созданными таблицами: create table authors ( id smallint not null auto_increment, lastName...

SELECT COUNT
Пытаюсь посчитать количество записей в таблице NEWS, но на второй строчке всегда выдает ошибку: Warning: mysql_fetch_array(): supplied...

mysql_query (Select COUNT)
Добрый день. Подскажите пожалуйста, как получить количественный результат из базы данных? У меня есть таблица, там 5 различных записей и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru