Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 3
Регистрация: 23.03.2015
Сообщений: 84
MS SQL

Получение записей с помощью хранимой процедуры

21.05.2015, 12:00. Показов 2200. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Постарался все в коде описать
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
        public static List<T> SelectAll<T>() where T : new()// функция котороая должна вытащить мне из БД (MS-SQL 2012) с помощью хранимой процедуры все записи
        {
            Type[] ExecAssemTypes = Assembly.GetExecutingAssembly().GetTypes();//достаем все написанные мной типы данных
 
            List<T> list = new List<T>();//лист такого же типа
            Type t = typeof(T);
            using (SqlConnection cn = new SqlConnection(cnStr))//строка подключения к БД
            {
                SqlCommand cmd = new SqlCommand("SelectAll" + t.Name, cn);    //название ХП и объект к кот применяется
                cmd.CommandType = CommandType.StoredProcedure;       //уточняем, что это ХП
                
                cn.Open();       //открываем соединение
                IDataReader reader = cmd.ExecuteReader();    //созд. объект для чтения из БД
 
                while (reader.Read())// цыкл в котором поочередно вычитывает то что вернула Хранимая Процедура
                {
                    var dto = new T();//объявляем переменную типа Т
                    foreach (var pi in typeof(T).GetProperties())//перебираем все свойства в Типе Т
                    {
                        if (ExecAssemTypes.Any(p => p == pi.PropertyType))//спрашиваем, является ли это свойство классом написанным мною?
                        {
                            var v = reader[pi.Name] != DBNull.Value ? reader[pi.Name] : null;//вычитываем значение по имени из ХП. 
                            //И тут загвоздка, в БД у меня хранятся ID этих элементов а нужен сам элемент по этому есть функция которая
                            //вытаскивает по ID "SelectById<T>((int)v)", но как мне эту функцию типизировать под тип объекта которой внутри класса
                            //типа Т??? Сейчас она под тип который пришел типизирована, а нужно что бы была под тип классса который записан в классе Т
                            pi.SetValue(dto, SelectById<T>((int)v), null);
                        }
                        else
                        {
                            var v = reader[pi.Name] != DBNull.Value ? reader[pi.Name] : null;
                            pi.SetValue(dto, v, null);
                        }
                    }
                    list.Add(dto);
                }
 
                cn.Close();
            }
            return list;
        }
        public static object SelectById<T>(int id) where T : new()// функция котороая должна из бд вытащить мне из БД (MS-SQL 2012) с помощью хранимой процедуры все записи
        {
            
            Type t = typeof(T);
            var dto = new T();
            using (SqlConnection cn = new SqlConnection(cnStr))//строка подключения к БД
            {
                SqlCommand cmd = new SqlCommand("SelectById" + t.Name, cn);    //название ХП и объект к кот применяется
                cmd.CommandType = CommandType.StoredProcedure;       //уточняем, что это ХП
                PropertyInfo[] properties = typeof(T).GetProperties();
                cmd.Parameters.Add("@id", SqlDbType.NVarChar).Value = id;
                cn.Open();       //открываем соединение
                IDataReader reader = cmd.ExecuteReader();    //созд. объект для чтения из БД
 
                reader.Read();// цыкл в котором поочередно вычитывает то что вернула Хранимая Процедура
 
                foreach (var pi in properties)// тут просто вытаскивает и пишет значение в переменную dto пото ее возвращает
                {
                    var v = reader[pi.Name] != DBNull.Value ? reader[pi.Name] : null;
                    pi.SetValue(dto, v, null);
                }
                cn.Close();
            }
            return dto;
        }
Добавлено через 52 минуты
Кому интересно. Я решил!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 public static object SelectById(Type t, int id)// функция котороая должна из бд вытащить мне из БД (MS-SQL 2012) с помощью хранимой процедуры все записи
        {
 
            var dto = Activator.CreateInstance(t, true);
            using (SqlConnection cn = new SqlConnection(cnStr))//строка подключения к БД
            {
                SqlCommand cmd = new SqlCommand("SelectById" + t.Name, cn);    //название ХП и объект к кот применяется
                cmd.CommandType = CommandType.StoredProcedure;       //уточняем, что это ХП
                PropertyInfo[] properties = t.GetProperties();
                cmd.Parameters.Add("@id", SqlDbType.NVarChar).Value = id;
                cn.Open();       //открываем соединение
                IDataReader reader = cmd.ExecuteReader();    //созд. объект для чтения из БД
 
                reader.Read();// цыкл в котором поочередно вычитывает то что вернула Хранимая Процедура
 
                foreach (var pi in properties)// тут просто вытаскивает и пишет значение в переменную dto пото ее возвращает
                {
                    var v = reader[pi.Name] != DBNull.Value ? reader[pi.Name] : null;
                    pi.SetValue(dto, v, null);
                }
                cn.Close();
            }
            return dto;
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2015, 12:00
Ответы с готовыми решениями:

Получение параметров Хранимой процедуры с SQL Server
Создал следующую ХП: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE proverich(@id_zal_dob int) AS

Как получить набор записей из хранимой процедуры?
Есть процедура (MS SQL) типа PROCEDURE vTest AS select * from Test возвращающая набор записей Как получитьпоказать этот...

Как получить набор записей из хранимой процедуры?
Есть процедура (MS SQL) типа PROCEDURE vTest AS select * from Test возвращающая набор записей Как получитьпоказать этот...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2015, 12:00
Помогаю со студенческими работами здесь

Вычисление общей суммы с помощью хранимой процедуры
создать хранимую процедуру, в которой выводится общая сумма окладов по каждому подразделению, если эта сумма превышает заданное значение,...

Создание хранимой процедуры, которая создает хранимые процедуры
Написать хранимую процедуру SQL , которая будет создавать хранимые процедуры(любые) для БД.

Вызов процедуры из хранимой процедуры
подскажите плз. кто сталкивался по теме. необходима так же передача параметров. За ранее всем благодарен

Вызов хранимой процедуры
Здравствуйте уважаемые форумчане. Уткнулся лбом и не знаю что дальше делать. Прошу Вашего совета. Ситуация такая: Есть храним. процедура...

Вызов хранимой процедуры
Хочу обновить бд с помощью хранимой процедуры ALTER procedure . @id_TP int, @id_worker int, @DT datetime, @id_Texbook int, @col_vo int...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru