Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 |

 

  Вопрос: Подходящий DataSet Добавлено: 19.05.05 16:39  

Автор вопроса:  danser | ICQ: 299287824 
Как програмно с настроеного датаАдаптера получить подходящий ДатаСет? В дизайнере есть Generate DataSet после этого появляется подходящий ДатаСет, а програмно?

Ответить

  Ответы Всего ответов: 35  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 19.05.05 16:54
Типизированный DataSet нельзя получить программно... Точнее, можно, но
очень-очень гемморойно. Потому что фактически создается класс-обертка
для нетипизированного DataSet'а.

Ответить

Номер ответа: 2
Автор ответа:
 danser



ICQ: 299287824 

Вопросов: 76
Ответов: 209
 Профиль | | #2 Добавлено: 19.05.05 19:12
А какой возможний выход? Я создал клас которий должен реализовать необходимие методи по работе с БД. Не хочется делать в дизайнере адаптер, датаСет, а потом передавать в клас как аргументи хочется програмно...

Наверное вообще датаСет не буду использовать. Буду пользоватся DataReader'oм для виборки и Commando'м для обновления и удаления записей.

Ответить

Номер ответа: 3
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #3 Добавлено: 19.05.05 19:37

dim ds as new dataset  

potom sozdaesh dataadapter
( naprimer:
 
dim daNew as new oledb.oledataadapter
),
ustanavlivaesh comandi (select, delete, insert update)
 potom, zagruzhaesh sxemu
  daNew.fillshema(ds)

dataset gotov (bez dannix)

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 19.05.05 20:04
danser, плз, боле конкретно опиши, что за решение ты хочешь сделать.
Я сейчас умной книги начитался именно по этой теме, могу помочь.

Ответить

Номер ответа: 5
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #5
Добавлено: 20.05.05 09:02
Типизированный датасет так сделать нельзя. А вот нетипизированный - без проблем...

Dim ds As New DataSet
Dim da As New SqlDataAdapter ("Select * From users", Conn)
da.Fill (ds, "Users";)
Me.DataGrid1.DataSource = ds.Tables("Users";)

Ответить

Номер ответа: 6
Автор ответа:
 danser



ICQ: 299287824 

Вопросов: 76
Ответов: 209
 Профиль | | #6 Добавлено: 20.05.05 12:15
Клас имеет свойство: Item(таблица, ID_строки)
При Get - связатся с таблица БД, виполнить хранимую процедуру по виборке строки (используя Command), возвратить строку типа "Ячейка1*Ячейка2*Ячейка3"
При Set(value) - используя подобний механизм обновить дание, здесь Value строка для обновления типа "Ячейка1*Ячейка2*Ячейка3"
Свойство перегружено и может возвращать/задавать не только конкретную строку, а и конкретную ячейку.
Также есть методи для добавления и удаления (с подобним механизмом) записей БД.
Клас нужен для упрощения основних операций с БД при разработке клиента не используя при этом промежуточний DataSet.

Может я как то криво думаю, подскажите как нужно.
Спасибо.

Ответить

Номер ответа: 7
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 20.05.05 13:57
Клас имеет свойство: Item(таблица, ID_строки)

Это должно быть не свойство, а функция.

При Set(value) - используя подобний механизм обновить дание, здесь Value строка для обновления типа "Ячейка1*Ячейка2*Ячейка3"

Это соответственно должна быть процедура.

С тенической стороны ты прав, но с логической - нет.

Клас нужен для упрощения основних операций с БД при разработке клиента не используя при этом промежуточний DataSet.

Могу сказать, что на начальном этапе это - очень простое и дешевое решение. Которое потом очень дорого обойдется.

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

Даже если речь идет о Windows-приложении, как минимум уровень домена должен существовать.

Что касается технической стороны, без проблем можно выбрать одну строчку - через DataReader, DataSet (дай бог, чтоб в Vs 2005 Beta2 или хотя бы в релизе наконец можно было через Tanle Adapter получить не таблицу из одной строки, а только строку).
Изменить данные строчки тоже можно - через Command.

Ответить

Номер ответа: 8
Автор ответа:
 danser



ICQ: 299287824 

Вопросов: 76
Ответов: 209
 Профиль | | #8 Добавлено: 20.05.05 16:53
А что такое уровень домена?

Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 20.05.05 17:24
> А что такое уровень домена?

В двух словах трудно объяснить...
Очень упрощенно - это бизнес-логика.

Ответить

Номер ответа: 10
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #10 Добавлено: 20.05.05 20:05
gemrroinoe sozdanie tipizirovannogo dataset.
mozhet cego nepravilno, menya potom Artem popravit ;-)

sozdaesh programmno obichniy dataset kak ukazivalos vishe
zatem:
dataset.wtiteXMLshema("dataset.xsd";)

*dataset.xsd tvoi netipizirovanniy dataset

posle etogo mozhno zapustit utilitu XSD iz
\programm files\Microsoft.net\frameworkSDK\bin
sposob viberi sam.. cherez "process" e. t. c.
v parametrah commandi ukazhi /d/l:vb dataset.xsd

utilita sozdast tebe file dataset.vb
potom mozhesh edo compilirovat, redactirovat i delat s nim vse chto xocesh

p.s. Prosba, nogami ne pinat', esli cto ne tak luchshe podskazhite drugoe reshenie

Ответить

Номер ответа: 11
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #11 Добавлено: 20.05.05 20:29
gemrroinoe sozdanie tipizirovannogo dataset.

Не понимаю, что геморойного?
Если структура БД есть, то никто не мешает созать новый DataSet (Project - Add New Item - DataSet).
В нем с помощью соответствующего дизайнера создаешь структуру БД, создаешь связи и т.д.

Ну а дальше - имеешь нормальный типизированный DataSet, унаследованный от класического DataSet.

Вот, собственно, и все дела.

Ответить

Номер ответа: 12
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #12
Добавлено: 21.05.05 09:04
Вручную сделать DataSet нет никаких проблем.

Но! Читайте внимательнее вопрос...

В дизайнере есть Generate DataSet после этого появляется подходящий ДатаСет, а програмно?


Подсказываю, ключевое слово здесь - "программно"!

P.S. danser, файл xsd - это не DataSet, а схема данных XML.

Ответить

Номер ответа: 13
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #13 Добавлено: 21.05.05 11:19
Создание DataSet программное невозможно, что ты, Павел, и написал в 1-м
посте.
Я только прокоментировал фразу "gemrroinoe sozdanie tipizirovannogo
dataset".

Да и вообще, мне почему-то кажется, что сам вопрос просто абсурдный. Если
попытаться представить и объяснить, для чего может понадоибться именно
типизированный DataSet, созданый программно, то прийдем к выводу, что он
просто не нужен.

Хотя нет, я все-таки придумал!
Создаем в программном коде класс (т.е. его код), соххраняем на диск,
консольной утилитой компилируем, подкладываем в папку программы, через
Reflection его загружаем и через тот же Reflection его используем. Именно
настоящий типизированный DataSet - без обмана!

Вопрос: во сколько раз проще пользоваться классическим DataSet, чем этим
типизированным?

Ответить

Номер ответа: 14
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #14
Добавлено: 21.05.05 15:37
Для сомневающихся, что программно реализовать strong typed Dataset можно, но это геморрой еще тот приведу кусок Help к npgSQL
В котором создается Сабж программно, прочитав его решил просто не связываться:)

 Working with strong typed datasets

This example will show how to use a strong typed dataset generated with xsd. To do so, we need a .xsd file specifing the schema to the strong dataset. You can generate this file by hand, or you can use xsd to generate it for you. To have xsd generate the .xsd for you, you have to suppy it with a .xml file which it will infer the .xsd from. We can use a .xml file generated with a DataAdapter.WriteXml() method:

public void GenerateXmlFromDataSet(NpgsqlConnection conn)
{
conn.Open();


NpgsqlDataAdapter da = new NpgsqlDataAdapter("select * from tablea", conn);

DataSet ds = new DataSet();

da.Fill(ds);

ds.WriteXml("StrongDataSetFeed.xml";);
}

This will give us a file which looks similar to this:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <Table>
    <field_serial>1</field_serial>
    <field_text>Random text</field_text>
  </Table>
  <Table>
    <field_serial>2</field_serial>
    <field_int4>4</field_int4>
  </Table>
  <Table>
    <field_serial>3</field_serial>
    <field_int8>8</field_int8>
  </Table>
  <Table>
    <field_serial>4</field_serial>
    <field_bool>true</field_bool>
  </Table>
  <Table>
    <field_serial>5</field_serial>
    <field_text>Text with ' single quote</field_text>
  </Table>
</NewDataSet>

This file will be used with xsd to generate the .xsd file with the following command:

xsd StrongDataSetFeed.xml

xsd will produce an xml schema which will have all types specified as string, we just change the xsd to use the correct types and have a .xsd file similar to this:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="pt-BR">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="Table">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="field_serial" type="xs:int" minOccurs="0" />
              <xs:element name="field_text" type="xs:string" minOccurs="0" />
              <xs:element name="field_int4" type="xs:int" minOccurs="0" />
              <xs:element name="field_int8" type="xs:long" minOccurs="0" />
              <xs:element name="field_bool" type="xs:boolean" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

With this file we issue the following command to have xsd generate the strong dataset:

xsd StrongDataSetFeed.xsd /dataset

Which will generate a file we can compile to get an assembly with the strong dataset. To use it, we do the following:

using System;
using Npgsql;


public class t
{
public static void Main(String[] args)
{
NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=joe;Password=secret;Database=joedata;";);

conn.Open();

NpgsqlDataAdapter da = new NpgsqlDataAdapter("Select * from tablea", conn);


NewDataSet n = new NewDataSet();

da.Fill(n);

foreach (NewDataSet._TableRow tr in n._Table)
{
Console.WriteLine(tr.field_serial);
}
}
}

Ответить

Номер ответа: 15
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #15
Добавлено: 21.05.05 15:40
Думаю с провайдерами для других СУБД все делается точно так же.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам