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

Табличная переменная в sql запросе

29.03.2017, 10:52. Показов 6240. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени. Проблема буквально на ровном месте. Нужно получить записи из БД. Написал Код :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 public ArrayList getStyles(string _type)
        {
            ArrayList styles = new ArrayList();        
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("select * from @TypeTable", conn);
                cmd.Parameters.AddWithValue("@TypeTable", _type);         
                conn.Open();
                using (SqlDataReader reader = cmd.ExecuteReader()) // Ошибка тут
                {
                    if (reader.Read())
                    {
                        foreach(DbDataRecord result in reader)
                        {
                            styles.Add(result);
                        }
                    }
                }               
             }
                return styles;
        }
При компиляции выдает ошибку :
Необходимо объявить табличную переменную "@TypeTable".
В чем тут проблема? Гугл в помощь результатов не дал. Подскажите кто понимает. Спасибо!

Добавлено через 1 час 28 минут
Пытаюсь уже через такую команду
SQL
1
@"select * from '" + _type + "'"
выдает
Неправильный синтаксис около конструкции "names".
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2017, 10:52
Ответы с готовыми решениями:

Sql переменная в запросе
Здравствуйте! Подскажите как объявлять и использовать переменные в Access? Пробую так:DECLARE @LastName nvarchar(30); SET @LastName =...

Переменная в sql запросе
Доброго времени суток ! В delphi черещ adoquery сделал запрос на отображение данных по конкретное дате Select *from Досмотровая where...

Переменная в SQL-запросе
Из предыдущей формы передается переменная, которую необходимо использовать в SQL-запросе. Однако по причине неверного формата переменной...

22
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,099
29.03.2017, 11:43
SQL не принимает переменной вместо названия таблицы
Правда в MS SQL можно объявить табличный тип и передавать целую таблицу данных как переменную, но я думаю - это не ваш вариант.
Попробуйте просто подставить название таблицы в запрос, а 7 строку можно убрать
C#
1
SqlCommand cmd = new SqlCommand($"select * from {_type}", conn);
Добавлено через 55 секунд
Цитата Сообщение от EvgenNews Посмотреть сообщение
Пытаюсь уже через такую команду
тут лишние одинарные кавычки
1
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
29.03.2017, 11:45
кавычки одинарные убери из второго варианта. А по существу - г-код страшный.
0
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
29.03.2017, 11:58  [ТС]
Цитата Сообщение от nedel Посмотреть сообщение
$"select * from {_type}"
помогло. спасибо. что означает $ ?
правда попробовал написать такой запрос, что бы получить имена столбцов из таблицы
SQL
1
$"select COLUMN_NAME from information_schema.columns where table_name = {_type}"
и опять выдает ошибку про недопустимое имя столбца, хотя там стоит имя таблицы.
Цитата Сообщение от pincet Посмотреть сообщение
г-код страшный
Что в нем такого уж страшного ?
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,099
29.03.2017, 12:07
Цитата Сообщение от EvgenNews Посмотреть сообщение
что означает $ ?
$ перед строкой позволяет подставлять в строку значения переменных окруженных фигурными скобками
Цитата Сообщение от EvgenNews Посмотреть сообщение
что бы получить имена столбцов из таблицы
тут можно использовать переменную, или взять название в кавычки
1
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
29.03.2017, 12:10  [ТС]
Почему то все полученные значения ячеек принимает как {System.Data.Common.DataRecordInternal}

Добавлено через 1 минуту
Цитата Сообщение от nedel Посмотреть сообщение
тут можно использовать переменную, или взять название в кавычки
спасибо. прописал так и заработало
C#
1
$"select COLUMN_NAME from information_schema.columns where table_name = '{_type}'"
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
29.03.2017, 12:10
Цитата Сообщение от EvgenNews Посмотреть сообщение
Что в нем такого уж страшного ?
Абсолютно все. Откуда такие мысли в голову приходят делать запрос к серверу данных в таком виде?
0
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
29.03.2017, 12:16  [ТС]
как бы, я не сам такие конструкции придумал. если есть пример более грамотного кода просьба поделиться ссылочкой
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
29.03.2017, 12:20
Цитата Сообщение от EvgenNews Посмотреть сообщение
C#
1
@"select * from '" + _type + "'"
конкретно это кто надоумил так делать???
0
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
29.03.2017, 12:24  [ТС]
Теперь другая проблема. DbDataRecord возвращает базовый тип ячейки. ({System.Data.Common.DataRecordInternal} ) можно было бы через
C#
1
2
3
4
5
 while (readerName.Read())
                        {
                            
                            Material.Add( readerName.GetValue(0););
                          }
Но что если я не знаю заранее число столбцов заранее?

Добавлено через 2 минуты
Цитата Сообщение от pincet Посмотреть сообщение
конкретно это
конкретно это я уже давно не использую но тк вариант через параметры результатов не давал попробовал, что бы понять нет ли ошибки в
C#
1
cmd.Parameters.AddWithValue("@TypeTable", _type);
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
29.03.2017, 12:26
Цитата Сообщение от EvgenNews Посмотреть сообщение
Но что если я не знаю заранее число столбцов заранее?
наконец-то. Дошло. Нельзя так с данными работать (ежели охота все сделать правильно)
DAL спасет отца русской демократии

Добавлено через 1 минуту
очередная попытка получить абсолютно универсальный запрос. Спешу обрадовать - ответ "42"
0
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
29.03.2017, 12:29  [ТС]
поконкретней и по делу пжалста
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
29.03.2017, 12:38
что не ясно-то?
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
29.03.2017, 12:45
Цитата Сообщение от EvgenNews Посмотреть сообщение
правда попробовал написать такой запрос, что бы получить имена столбцов из таблицы
C#
1
$"select COLUMN_NAME from information_schema.columns where table_name = {_type}"
и опять выдает ошибку про недопустимое имя столбца, хотя там стоит имя таблицы.
А вот тут название таблицы нужно брать в одинарные кавычки.
1
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
29.03.2017, 12:47  [ТС]
Какое отношение
Цитата Сообщение от pincet Посмотреть сообщение
DAL
имеет к конкретной задаче - выцепить данные если
Цитата Сообщение от pincet Посмотреть сообщение
я не знаю заранее число столбцов заранее?
?
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
29.03.2017, 12:52
Цитата Сообщение от pincet Посмотреть сообщение
очередная попытка получить абсолютно универсальный запрос. Спешу обрадовать - ответ "42"
Пилите, Шура, они золотые.
PS. Иногда не вредно целевую задачу озвучить....
0
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
29.03.2017, 13:02  [ТС]
Иногда не вредно прочитать вопрос прежде чем писать остроумный ответ.
Цитата Сообщение от EvgenNews Посмотреть сообщение
Теперь другая проблема. DbDataRecord возвращает базовый тип ячейки. ({System.Data.Common.DataRecordInternal} ) можно было бы через
Цитата Сообщение от EvgenNews Посмотреть сообщение
C#
1
2
3
4
while (readerName.Read())
{
    Material.Add( readerName.GetValue(0););
}
Цитата Сообщение от EvgenNews Посмотреть сообщение
Но что если я не знаю заранее число столбцов заранее?
Добавлено через 4 минуты
Есть таблица в которой неизвестное количество столбцов с данными. Записать в arraylist значения из всех столбцов таблицы.

Добавлено через 2 минуты
можно конечно сначала узнать число этих столбцов отдельным запросом и записать в int n. а потом
C#
1
2
3
4
5
Material.Add( readerName.GetValue(0);
Material.Add( readerName.GetValue(1);
Material.Add( readerName.GetValue(2);
///
Material.Add( readerName.GetValue(n);
Но может как то получше можно?
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
29.03.2017, 13:08
Цитата Сообщение от EvgenNews Посмотреть сообщение
Есть таблица в которой неизвестное количество столбцов с данными. Записать в arraylist значения из всех столбцов таблицы.
Считайте данные в DataTable и перебирайте их в цикле по строкам и столбцам.
1
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
29.03.2017, 13:10
код давно пишешь? с циклами не знаком, конечно

Не по теме:


Только открой страшную военную тайну - зарадидля тебе это все?

0
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
29.03.2017, 13:20  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
с циклами не знаком
это вы уважаемый из приведенного выше вывод сделал? странно там вроде циклы были. если по делу сказать нечего то не засоряй тему пжалста

Добавлено через 34 секунды
Цитата Сообщение от pincet Посмотреть сообщение
код давно пишешь?
этот 2 день. а вообще с ado net знаком вторую неделю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.03.2017, 13:20
Помогаю со студенческими работами здесь

Переменная $_COOKIE в sql запросе
Не могу разобраться что не так написал. Слова ПРАВИЛЬНО и НЕПРАВИЛЬНО выводятся корректно при соблюдении соответствующих условий, а вот...

Переменная типа Date в SQL запросе
Не могу составить грамотно запрос используя переменную, в которой дата. Public ss As Date = Date.Now _________________________ ...

Динамический запрос и внешняя табличная переменная
Добрый день! Подскажите, можно как - нибудь из динамического запроса вытащить данные во внешнюю табличную переменную. Функция...

Переменная в запросе
День добрый. Вопрос, возможно банальный, но всё таки. По ходу пьесы вычисляю параметр - номер раздела. Далее необходимо вывести в...

Переменная в запросе
ABSQuery1.SQL.Text := 'update BAZA set NAME = "ВАСЯ" '; Подскажите как мне вместо ВАСЯ текстовую переменную вставить ,без ковычек сразу...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru