Страница: 1 | 2 | 3 |
Вопрос: Подходящий DataSet
Добавлено: 19.05.05 16:39
Автор вопроса: danser | ICQ: 299287824
Как програмно с настроеного датаАдаптера получить подходящий ДатаСет? В дизайнере есть Generate DataSet после этого появляется подходящий ДатаСет, а програмно?
Ответы
Всего ответов: 35
Номер ответа: 1
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #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
potom sozdaesh dataadapter
( naprimer:
ustanavlivaesh comandi (select, delete, insert update)
potom, zagruzhaesh sxemu
dataset gotov (bez dannix)
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 19.05.05 20:04
danser, плз, боле конкретно опиши, что за решение ты хочешь сделать.
Я сейчас умной книги начитался именно по этой теме, могу помочь.
Номер ответа: 5
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #5
Добавлено: 20.05.05 09:02
Типизированный датасет так сделать нельзя. А вот нетипизированный - без проблем...
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
Это должно быть не свойство, а функция.
Это соответственно должна быть процедура.
С тенической стороны ты прав, но с логической - нет.
Могу сказать, что на начальном этапе это - очень простое и дешевое решение. Которое потом очень дорого обойдется.
Фактически получается, что у твоего приложения отсутствует уровень домена - остается только представление и источник данных, что не лучшим образом отражается собственно на логике приложения, и потом еще добавит проблем при попытках масштабирования.
Даже если речь идет о 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.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
Не понимаю, что геморойного?
Если структура БД есть, то никто не мешает созать новый DataSet (Project - Add New Item - DataSet).
В нем с помощью соответствующего дизайнера создаешь структуру БД, создаешь связи и т.д.
Ну а дальше - имеешь нормальный типизированный DataSet, унаследованный от класического DataSet.
Вот, собственно, и все дела.
Номер ответа: 12
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #12
Добавлено: 21.05.05 09:04
Вручную сделать 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-сайт:
Профиль | | #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=secretatabase=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-сайт:
Профиль | | #15
Добавлено: 21.05.05 15:40
Думаю с провайдерами для других СУБД все делается точно так же.