Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> reader = command.ExecuteReader(), как данные запихнуть в таблицу? 
:(
    Опции темы
vlsaf
Дата 24.12.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 9.5.2007

Репутация: нет
Всего: 1



Всем привет.

Данные считываются с SQL сервера таким вот образом:
Код

SqlDataReader reader = command.ExecuteReader();

reader содержит данные некоторой таблицы.

Теперь я хочу эти данные записать в нормальную таблицу DataTable.
Как?


Нужно ли мне самому в проекте создавать DataSet и в нем DataTаble и перечислять поля руками, а потом в цикле для reader заполнять эту таблицу? 

Хотелось бы это как-то автоматизировать. Ведь структура таблицы reader-у извесна. Так нафига повторяться?

Структуру таблицы можно получить так
Код

DataTable schemaTable = reader.GetSchemaTable();


Кaк имея схему таблицы сделать саму таблицу и заполнить ее данными?

PM   Вверх
Дрон
Дата 24.12.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 5
Всего: 93



vlsaf, а SqlDataAdapter.Fill тебя чем-то не устраивает?

Цитата(vlsaf @  24.12.2008,  13:55 Найти цитируемый пост)
Кaк имея схему таблицы сделать саму таблицу и заполнить ее данными?

Совсем уж ничего не делая не получится (ну кроме как через SqlDataAdapter).  Но ведь GetSchemaTable возвращает вполне понятный результат: каждая строка там содержит информация о столбце, так вот пробегаешься по ней в цикле и создаёшь все столбцы таблицы. По-моему всё очень просто.

Или ты не знаешь как что-то из этого сделать? smile
Тогда спрашивай конкретней.


--------------------
Да. Именно так.
PM   Вверх
vlsaf
Дата 24.12.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 9.5.2007

Репутация: нет
Всего: 1



Спасибо за совет.
Все получилось.
Код

        SqlCommand sqlCommand = new SqlCommand("Auftrag_SelectOld", myConnection);
        sqlCommand.CommandType = CommandType.StoredProcedure;

        SqlParameter par_name = new SqlParameter("@userName", name);
        SqlParameter par_password = new SqlParameter("@password", password);
        sqlCommand.Parameters.AddRange(new SqlParameter[] { par_name, par_password });

        DataTable resultDataTable = new DataTable();
        DataTable shemaDataTable = new DataTable();
        SqlDataReader sqlDataReader = null;

        object[] row;
        DataRow myNewRow;

        try
        {
            myConnection.Open();
            sqlDataReader = sqlCommand.ExecuteReader();
            shemaDataTable = sqlDataReader.GetSchemaTable();
            row = new object[sqlDataReader.FieldCount];

            for (int i = 0; i < sqlDataReader.FieldCount; i++)
            {
                resultDataTable.Columns.Add(shemaDataTable.Rows[i]["ColumnName"].ToString(),
                    ((System.Type)shemaDataTable.Rows[i]["DataType"]));
            }

            while (sqlDataReader.Read())
            {
                sqlDataReader.GetValues(row);
                myNewRow = resultDataTable.Rows.Add(row);

            }
        }
        catch (Exception ex)
        {
            throw (ex);
        }
        finally
        {
            if (sqlDataReader != null)
                sqlDataReader.Close();

            if (sqlCommand.Connection.State != ConnectionState.Closed)
                myConnection.Close();
        }
        return resultDataTable;


Но хотелось бы знать, как это все реализовать через SqlDataAdapter.
Нужно использовать хранимые процедуры для вытягивания данных.
Как увязать хранимки с SqlDataAdapter - пока не знаю.
PM   Вверх
likegift
Дата 27.12.2008, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 14.10.2008

Репутация: нет
Всего: 3



Цитата(vlsaf @ 24.12.2008,  20:08)
Но хотелось бы знать, как это все реализовать через SqlDataAdapter.
Нужно использовать хранимые процедуры для вытягивания данных.
Как увязать хранимки с SqlDataAdapter - пока не знаю.

SqlConnection MyConnection - твой коннект, а дальше примерно вот так:

Код

            SqlCommand MyCmd= new SqlCommand("StoryProcedureName", MyConnection);
            MyCmd.CommandType = CommandType.StoredProcedure;
            MyCmd.Parameters.Add("@Param1", SqlDbType.VarChar).Value = "Hello_World";
            SqlDataAdapter da = new SqlDataAdapter(MyCmd);
            DataTable dt = new DataTable();
            da.Fill(dt);



PM MAIL   Вверх
emmanuil
Дата 31.1.2009, 22:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



а еще проще вот так:
Код

SqlCommand MyCmd= new SqlCommand("StoryProcedureName", MyConnection);
MyCmd.CommandType = CommandType.StoredProcedure;
MyCmd.Parameters.Add("@Param1", SqlDbType.VarChar).Value = "Hello_World";
DataTable dt = new DataTable();
dt.Load(MyCmd.ExecuteReader());

И схему загрузит и все что надо. И можно еще конкретно указать, что именно загружать в ExecuteReader();
PM MAIL   Вверх
likegift
Дата 5.2.2009, 21:08 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 14.10.2008

Репутация: нет
Всего: 3



Цитата(emmanuil @ 1.2.2009,  01:07)
а еще проще вот так:
Код

SqlCommand MyCmd= new SqlCommand("StoryProcedureName", MyConnection);
MyCmd.CommandType = CommandType.StoredProcedure;
MyCmd.Parameters.Add("@Param1", SqlDbType.VarChar).Value = "Hello_World";
DataTable dt = new DataTable();
dt.Load(MyCmd.ExecuteReader());

И схему загрузит и все что надо. И можно еще конкретно указать, что именно загружать в ExecuteReader();

а соединение кто откроет и закроет?
PM MAIL   Вверх
emmanuil
Дата 6.2.2009, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



likegift, вот ты открой его и закрой, раз ты знаешь как работать с подключением.
Я показал спосок загрузки в DataTable и акцент тут был на этом. vlsaf думаю догодался, что не откроешь соединение - не обратишься к базе. А вот вместо того чтобы делать пустые замечаения написал бы ему сразу все возможные способы.
PM MAIL   Вверх
likegift
Дата 6.2.2009, 12:42 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 14.10.2008

Репутация: нет
Всего: 3



Цитата(emmanuil @ 6.2.2009,  06:59)
likegift, вот ты открой его и закрой, раз ты знаешь как работать с подключением.
Я показал спосок загрузки в DataTable и акцент тут был на этом. vlsaf думаю догодался, что не откроешь соединение - не обратишься к базе. А вот вместо того чтобы делать пустые замечаения написал бы ему сразу все возможные способы.

я это к тому спросил, что твой способ не проще, а наоборот сложнее для новичка. ибо в отличии от пользования адаптером, в твоем способе всегда требуется следить за состоянием соединения.
поэтому, прежде чем нервничать и обвинять в пустоте замечаний, советую глубже анализировать вопрос.
PM MAIL   Вверх
emmanuil
Дата 6.2.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



Цитата(likegift @  6.2.2009,  10:42 Найти цитируемый пост)
я это к тому спросил, что твой способ не проще, а наоборот сложнее для новичка

Ага, проще объявить еще одну переменную какого-то класса, причем незнакомого для автора:
Цитата(vlsaf @  24.12.2008,  15:08 Найти цитируемый пост)
Но хотелось бы знать, как это все реализовать через SqlDataAdapter.Нужно использовать хранимые процедуры для вытягивания данных.Как увязать хранимки с SqlDataAdapter - пока не знаю.

Цитата(likegift @  6.2.2009,  10:42 Найти цитируемый пост)
ибо в отличии от пользования адаптером, в твоем способе всегда требуется следить за состоянием соединения.
Вот как раз таки за соединением нужно сразу привыкать следить.
Цитата(likegift @  6.2.2009,  10:42 Найти цитируемый пост)
советую глубже анализировать вопрос.

Видно ты не глубоко анализирвал вопос:
Цитата(vlsaf @  24.12.2008,  11:55 Найти цитируемый пост)
Кaк имея схему таблицы сделать саму таблицу и заполнить ее данными?

И тот способ проще для этого.
И заметь, ты начал обсуждать мой способ, а не я твой.
Не вижу дальше смысла обсуждать с тобой этот вопрос, так как в твоей компетенции по этому вопросу я мягко говоря засомневался после:
Цитата(likegift @  6.2.2009,  10:42 Найти цитируемый пост)
ибо в отличии от пользования адаптером, в твоем способе всегда требуется следить за состоянием соединения
 И не имеет значения, новичек или нет. как щас привыкнет, так потом и будет. Соединение с БД это такой ресурс, который нужно использовать и закрыть, использовать и закрыть, и открывать непосредственно перед использованием.
PM MAIL   Вверх
likegift
Дата 6.2.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 14.10.2008

Репутация: нет
Всего: 3



emmanuil, 
вообще-то DataAdapter после вызова метода Fill возвращает соединение в то состояние, в котором оно до него было.
если было открыто- оставляет открытым, если было закрыто - закрывает. это так, для справки.
PM MAIL   Вверх
emmanuil
Дата 6.2.2009, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



Не удержался. smile
Цитата(likegift @  6.2.2009,  14:02 Найти цитируемый пост)
emmanuil, вообще-то DataAdapter после вызова метода Fill возвращает соединение в то состояние, в котором оно до него было.если было открыто- оставляет открытым, если было закрыто - закрывает. это так, для справки.
Это я знаю. Вообще-то я не говорил как адаптер работает с соединением. Если ты об этом:
Цитата(emmanuil @  6.2.2009,  11:15 Найти цитируемый пост)
Цитата(likegift @  6.2.2009,  10:42 )ибо в отличии от пользования адаптером, в твоем способе всегда требуется следить за состоянием соединения.Вот как раз таки за соединением нужно сразу привыкать следить.
, то что тут непонятного. Ты написал "ибо в отличии от пользования адаптером, в твоем способе всегда требуется следить за состоянием соединения", а я написал, "Вот как раз таки за соединением нужно сразу привыкать следить", тем самым дав понять, что нужно следить самому, чтобы было все прозрачно и понятно - открыл где надо, закрыл где надо. Но на этом все. smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.