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

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

21.01.2013, 13:42. Показов 2245. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru