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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с базами в .Net, Общие принципы 
:(
    Опции темы
Nastya
Дата 10.9.2004, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 2
Всего: 44



Люди, товарищи, человеки!
Какие ест подходы к базам в .Net.
Через какие классы, службы и т.д.
Есдит можно ссылочку на хорошую доку с примерами. Если можно ориентированно на visulStudio .Net и C#


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
mr.DUDA
Дата 10.9.2004, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



А что за тип БД ? Для SQL Server в .NET есть набор классов начиная с SqlConnection, для "просто ADO" есть OleDbConnection и т.п.

А вообще, имхо, лучше всего начать с общих принципов работы с датасетами, таблицами и т.п. - например просмотреть классы DataSet, DataTable, DataRow. Методы работы с ними ОЧЕНЬ похожи на работу с обычными массивами, так что усвоить будет легко. А конкретизированные классы для работы с ADO/SQLServer и т.п. в конце концов сводятся к датасету, так что вот... smile.gif


--------------------
user posted image
PM MAIL WWW   Вверх
Kurt
Дата 11.9.2004, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

Репутация: 20
Всего: 36



Для работы с базами данных в .NET разработана новая технология ADO.NET. Хочется отметить, что, несмотря на вызывающее асоциации название, она не является расширением классического ADO. Это ИНАЯ модель. Не буду говорить лучше или хуже, здесь судит каждый сам, пусть будет "иная". smile.gif
ADO.NET ориентирована на построение рассоединенных (diconnected) систем на .NET-платформе.
Суть рассоединенных систем заключается в следующем: исходя из того, что часто требуется минимизировать нагрузку на сеть, на стороне пользователя создается какбы локальная копия базы данных, что хранится на сервере. Клиент изменяет этот локальных набор данных и лишь после коммита он отправляется на сервер (естественно, отправляется не все, а лишь изменения). Уже здесь видно отличие - классическая ADO рассчитана на клиент-серверные приложения, т.е. когда клиент и сервер постоянно взаимодействуют друг с другом, тем самым нагружая сеть. Конечно, ADO.NET тоже далеко не идеальна - например, набор данных, с которыми работает пользователь, может устареть (кто-нибудь другой изменил данные), однако, это все решается. smile.gif
Еще одно интересное решение в ADO.NET это то, что здесь реализована поддержка представления данных в XML-форматах. Что дает возможность переправлять данные через родной и всеми любимый HTTP - следовательно, отпадают проблемы с фаерволами.
Итак, какие задачи решают типы ADO.NET?
1) Установить соединение;
2) Создать локальную копию данных; (для этого применяется класа DataSet)
3) Отключиться от сервера;
4) Вернуть изменения на сервер.
Т.о. в центре внимания находится класс DataSet - локальный набор таблиц и информации об отношениях между ними. Это некий RecordSet из классического ADO, различия в том, что RecordSet хранит только одну таблицу, а DataSet - фактически полную копию всей базы.
Как только создан и заполнен объект класса DataSet, к нему допустимы все операции, что и с обычными базами - добавлять/удалять записи, ставить фильтры и т.п.
Когда все изменения будут закончены, информация будет отправлена на сервер.
DataSet создается при помощи т.н. управляемого провайдера (managed provider) - набора классов, реализующих интерфейсы доступа к базе. В состав .NET-Framework 1.1 входят два провайдера: OleDb-провайдер (для хранилищ данных, к-е поддерживают формат OleDb) и SQL-провайдер (спец. адаптирован для работы с MSSQL Server 7.0 и выше).
Т.е. ситуация такая: по возможности используется специализированный провайдер, позволяющий наиболее эффективно работать с конкретной СУБД. Если такого провайдера нет - используют OleDb. Т.к. в OleDb выполняется куча преобразований в формат OleDb, то этот способ медленнее, чем спец. провайдеры. На даный момент большинство фирм производителей СУБД стараются выпустить адаптированный провайдер. Так, выпустили или во всяком случае собираются выпустить провайдеры под MySQL (точно знаю, что выпущен..), Oracle, Cache, Postgres etc.
Все типы ADO.NET содержатся в namespace System.Data, расположенном в сборке System.Data.dll. Любой ADO.NET-проект должен содержать ссылку на эту сборку. Кроме того, нужен будет тот или иной провайдер. "Стандартные" провайдеры содержатся в namespace'ах System.Data.SQL и System.Data.OleDb соответственно для SQL- и OleDb-провайдера. Если используется сборка третьей фирмы - нужно тоже ее подключить (как в случае с MySQL).
Пространство имен System.Data содержит много типов, обеспечивающих работу с БД, но самыми основными являются:
1) DataSet; (локальная копия данных. Состоит из множества объектов DataTable, а также информацию об отношениями между ними)
2) DataTable; (представляет собой одну конкретную таблицу)
3) DataColumn; (столбец в объекте DataTable)
4) DataRow; (строка в объекте DataTable);

DataColumn(с него проще начать)
Как уже упоминалось, это отдельный столбец в таблице. Он содержит поля, определяющие характеристики данного столбца в таблице. Например, Caption (заголовок столбца), DataType (тип), AutoIncrement (для настройки автоинкремента) и д.р.
Создадим столбец и добавим его в таблицу:
Код

//создаем DataColumn
DataColumn myColumn = new DataColumn();
myColumn.ReadOnly = false;
myColumn.ColumnName = "superColumn";
myColumn.DataType = Type.GetType("System.String");
myColumn.Caption = "My Super Column";
//создаем таблицу
DataTable myTable = new DataTable("MyTable");
//добавляем столбец
myTable.Columns.Add(myColumn);


Или вот настроим автоинкремент:
Код

..
DataColumn myColumn = new DataColumn();
..
myColumn.AutoIncrement = true;
myColumn.AutoIncrementSeed = 100; //с какого номера начинать счет
myColumn.AutoIncrementStep = 5; //шаг инкремента
..



DataRow
Это одна конкретная строка таблицы. Класс содержит много интересных свойств и методов. Описывать их здесь нет особого смысла - существует куча документации на эту тему. Мне особенно понравился метод Delete() - ПОМЕТИТЬ строку как удаленную. Я специально выделил это слово - т.е. физически строка не будет удалена, пока не будет подана команда AcceptChanges() (метод этого же класса). Т.е. можно отменить удаление в любой момент (метод RejectChanges)
Небольшой пример работы с этим классом:
Код

..
//создаем таблицу с одним столбцом
DataTable myTable = new DataTable("MyTable");
DataColumn myColumn = new DataColumn("superColumn", Type.GetType("System.Int32")); //обратите внимание на конструктор..
myTable.Columns.Add(myColumn);
//создаем DataRow
DataRow myRow;
myRow = myTable.NewRow(); //создали новую строку
//добавляем ее в таблицу
myTable.Rows.Add(myRow);
//коммитуем изменения
myTable.AcceptChanges();
//изменяем строку по вкусу (обратите внимание на способ доступа к нужному столбцу..)
myRow["superColumn"] = 12345;
//удаляем строку и коммитуем это дело
myRow.Delete();
myRow.AcceptChanges();
..



DataTable
Описывает таблицу из набора данных DataSet. Собственно, я уже использовал этот тип в примерах раньше. Повторяться не хочу, поэтому давайте сразу с примера, естественно, комментируя некоторые моменты.
Код

//создаем таблицу и настраиваем столбцы
DataTable myTable = new DataTable("MyTable");
DataColumn myColumn1 = new DataColumn("superColumn1", Type.GetType("System.Int32"));
DataColumn myColumn2 = new DataColumn("superColumn2", Type.GetType("System.String"));
//думаю, тут все понятно из названий свойств
myColumn1.ReadOnly = true;
myColumn1.AllowDBNull = false;
myColumn1.Unique = true;
myColumn1.AutoIncrement = true;
myColumn1.AutoIncrementSeed = 1234;
myColumn1.AutoIncrementStep = 7;
//добавляем столбцы в таблицу
myTable.Columns.Add(myColumn1);
myTable.Columns.Add(myColumn2);
//настроим первый столбец как первичный ключ
DataColumn[] PrKeys = new DataColumn[1]; //в общем случае, это может быть набор ключей, т.е. мы должны использовать массив
PrKeys[0] = myTable.Columns["superColumn1"];
myTable.[b]PrimaryKey[/b] = PrKeys;
//добавим новую строку
DataRow myRow = myTable.NewRow();
myRow["superColumn1"] = 777;
myRow[1] = "URA!!!"; //можно обращаться по номеру столбца (считая от 0)
myTable.Rows.Add(myRow);
..
//добавили еще кучу строк
..  
//удаляем 2-ю строку
try{
myTable.Rows[1].Delete();
myTable.[b]AcceptChanges()/[b];
}
catch(Exception ex){
//обрабатываем исключение (вдруг, такой строки нет? или произошли еще какие-нибудь беды..)
}
//удалим и вренем к жизни 5-ю строчку
myTable.Rows[4].Delete();
myTable.[b]RejectChanges()[/b];
//найдем все строки, удовлетворяющие некоторому условию
string myFilter = "superColumn2='URA!'";
DataRow[] filtredRows = myTable.[b]Select[/b](myFilter);
...
//обрабатываем полученные строки
...
//ну и т.д. и т.п. :)



Хорошо бы еще описать класс DataSet (например, как читать/сохранять данные из DataSet в XML-файлы, как реализовывать отношения между таблицами), но это уже явно перебор для одного раза. smile.gif Если надо будет - скажите.
Упомяну лишь один, на мой взгляд, самый нужный метод - Add() - он добавляет таблицу в конкретный DataSet. Приблизительно, так:
Код

..
DataTable myTable = new DataTable("MyTable");
..
DataSet myDS = new DataSet("MyDataSet");
..
myDS.Tables.Add(myTable);
..
//получаем таблицу из DataSet
DataTable superTable = myDS.Tables["MyTable"];


С помощью вышесказанного уже можно построить вполне состоятельное приложение, к-е поддерживает все функции, кроме непосредственно сохранения в базе (ну, можно таблицы в XML-файлах посохранять). Т.е. выгрузим приложение - выгрузятся и наши данные. Вот тут-то на сцену и выходят управляемые провайдеры!
Дальнейшее описание будет строиться на основе OleDb (все-таки, больше универсальности), а также на "СУБД" Access, да простят меня читающие эти строки. smile.gif Просто, это удобно на этапе объяснения.
Сразу подключим наши namespace'ы:
Код

using System.Data;
using System.Data.OleDb;


Перечислим основные типы OleDb:
1) OleDbConnection; (Соединение с источником данных)
2) OleDbCommand; (Запрос к источнику данных)
3) OleDbDataAdapter; (о нем будт особо сказано ниже)
4) OleDbDataReader; (считывает данные из источника в одном направлении (только вперед))
5) OleDbErrorCollection; (набор ошибок и предупреждений, к-е возвращает источник данных)
6) OleDbParameter; (параметр для передачи хранимой процедуре)

Итак, чтобы подключиться к источнику данных используем объект класса OleDbConnection. Особенно важное св-во этого класса - ConnectionString: строка, характеризующая подключение к серверу.
Например, подключимся к Access:
Код

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+@"data source=G:\baza.mdb";
//открываем и тут же закрываем соединение:
conn.Open();
conn.Close();


Естественно, для каждой СУБД свой ConnectionString.
Теперь как выполнить запрос к источнику данных. Для этого, как уже было сказано, используется класс OleDbCommand. В конструкторе необходимо указать строку, содержащую SQL-запрос, а также созданное нами соединение. Чтение происходит с помощью OleDbDataReader:
Код

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+@"data source=G:\baza.mdb";
conn.Open();
string sSQL = "select column1 from superTable where column1>100";
OleDbCommand cmd = new OleDbCommand(sSQL, conn);  
//получаем DataReader
OleDbDataReader myReader;
myReader = cmd.ExecuteReader(); //исполняем запрос и возвращаем данные через Reader
//в случае, если ответ от сервера не нужен (например, для update, delete etc.) используется метод [b]ExecuteNonQuery()[/b]
..
//проходимся циклом по результатам выборки
while(myReader.Read())
{
 Console.WriteLine("Field="+myReader["column1"].ToString());  
//еще можно обращаться по номеру столбца:
 Console.WriteLine("Field="+myReader[0].ToString());  
}
//закрываем поток данных
myReader.Close();
//закрываем соединение
conn.Close();

Теперь уже можно написать простенького клиента к базе данных. Мы можем читать данные (правда, в одном направлении) и посылать управляющие запросы. Однако, причем здесь DataSet и все прочее? Как все-таки заполнить этот несчастный класс данными с сервера?
Насколько я знаю, существует несколько способов, но самый простой и распространенный - использовать класс OleDbDataAdapter.
Основная задача этого класса - автоматизация процессов редактирования, добавления и т.д. данных, однако, здесь я его расписывать не буду, упомяну лишь как заполнить DataSet.
Для этого нужно создать объект класса OleDbDataAdapter на основе открытого соединения с сервером БД.
Далее вызывается метод Fill, к-й автоматически и заполняет наш DataSet. Для отправления изменений используется метод Update().
Проиллюстрируем все это на примере:
Код

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+@"data source=G:\baza.mdb";
conn.Open();
string sSQL = "select * from superTable"; //этот запрос будет использоваться при выборке данных с сервера
OleDbDataAdapter myAdapter = new OleDbDataAdapter(sSQL, conn);
//создаем и заполняем DataSet
DataSet myDS = new DataSet("MyDataSet");
try{
 myAdapter.Fill(myDS, "superTable");
}
catch(Exception ex){
//обрабатываем ошибку
 Console.WriteLine("Error! "+ex.Message);
}
finally //так или иначе, но мы должны закрыть соединение
{
 conn.Close();
}
..
//закончив изменения с DataSet, отправим изменения на сервер:
 myAdapter.Update(myDS, "superTable");



........................
Думаю, пора заканчивать сей монумент. Это лишь самое начало. Здесь не затронуты вопросы хранимых процедур, работы с XML и т.д. Но это лучше в другой раз. Хочу заметить, что если вы замените "OleDb" в названиях классов на "Sql" или "ODBC", то получите соответсвенно классы для работы с MS SQL Server и ODBC.
Надеюсь, это в какой-то степени является ликбезом в области ADO.NET и поможет вам в разработке .NET-приложений. Сейчас 4-е часа ночи, поэтому допускаю, что тут сделано куча ошибок и описок, кроме того, здесь рассказано как Я представляю себе ADO.NET, поэтому буду рад любым поправкам (можно через PM). smile.gif
Если есть необходимость продолжить - пишите, что следует раскрыть подробнее.


З.Ы. Для того, чтобы отобразить таблицу в DataGrid достаточно использовать один метод:
Код

dataGrid1.SetDataBinding(myDS,"superTable"); //показываем таблицу с именем superTable



--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
December
Дата 11.9.2004, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

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



Хотелось бы добавить, что скоро выйдет ADO.NET 2, в которой будет кое-что новое, а в частности - асинхронное выполнение запросов (например, BeginExecuteNonQuery, EndExecuteNonQuery). Реализовано три спосооба получения данных от асинхронного запроса, что довольно удобно. Подробнее об этом имеет смысл прочитать у мелкомягких (ссылку не помню).


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 11.9.2004, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Если по-английски сойдёт, то вот "Practical Guide to .NET DataTables, DataSets and DataGrids":

http://www.codeproject.com/csharp/Practica...eDataGrids1.asp
http://www.codeproject.com/csharp/Practica...eDataGrids2.asp
http://www.codeproject.com/csharp/Practica...eDataGrids3.asp

Очень полная и неплохо построенная дока.


--------------------
user posted image
PM MAIL WWW   Вверх
stron
Дата 11.9.2004, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

Репутация: 4
Всего: 36



На форуме всё больше становится людей, интересующихся .NET-ом.
IMHO, пора создавать ФАК


2 Kurt
отличный материал


--------------------
подписи нет
PM ICQ   Вверх
Nastya
Дата 20.9.2004, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 2
Всего: 44



Цитата
Конечно, ADO.NET тоже далеко не идеальна - например, набор данных, с которыми работает пользователь, может устареть (кто-нибудь другой изменил данные), однако, это все решается

Как???


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
AntonSaburov
Дата 21.9.2004, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Да вообщем-то старыми дедовским способам - перегрузкой smile.gif
PM MAIL WWW ICQ   Вверх
Nastya
Дата 26.9.2004, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 2
Всего: 44



Кстати оказывается, что для подключения к базам можно использовать не только ADO.NET, но и ODBC и других провайдеров.
Что наиболее красива реализовано, так это то, что потом можно при помощи специальных классав типа OleDbDataAdapter, ODBCDataAdapter и т.д. Это все "приводить" к DataSet и работать обсолютно одинаково не взирая, так сказать на лица.
Супер!
Я была в вовсторге.

Или я ошибаюсь?


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
mr.DUDA
Дата 26.9.2004, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Nastya @ 26.9.2004, 09:55)
для подключения к базам можно использовать не только ADO.NET, но и ODBC и других провайдеров

ADO.NET - это и есть та самая надстройка над разнотипными источниками данных (таких как ODBC, OLE DB, XML), позволяющая работать с ними через DataSet.


--------------------
user posted image
PM MAIL WWW   Вверх
Guest
Дата 9.11.2004, 12:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте Kurt.
Прошу прощенья за вопрос не по теме.
Спасибо за ответ, эту статью я прочитал, но вопрос задал, случайно, не в ту тему.

Код

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+@"data source=G:\baza.mdb";
conn.Open();
string sSQL = "select * from superTable"; //этот запрос будет использоваться при выборке данных с сервера
OleDbDataAdapter myAdapter = new OleDbDataAdapter(sSQL, conn);
//создаем и заполняем DataSet
DataSet myDS = new DataSet("MyDataSet");
try{
myAdapter.Fill(myDS, "superTable");
}
catch(Exception ex){
//обрабатываем ошибку
Console.WriteLine("Error! "+ex.Message);
}
finally //так или иначе, но мы должны закрыть соединение
{
conn.Close();
}
..
//закончив изменения с DataSet, отправим изменения на сервер:
myAdapter.Update(myDS, "superTable");

и для подключения в гриде:

dataGrid1.SetDataBinding(myDS,"superTable"); //показываем таблицу с именем superTable

Я не увидел явной связи между MyAdapter и myDS.

Если можно, подскажите пожалуйста, - где можно прочитать об этом поподробнее (если можно на русском языке). И если не сильно затруднит какой ни будь примерчик:
с mdb - файлом, скажем две связанные таблички и гридами кликнув на какой то записи чтоб открывался диалог с другим гридом и связанными записями (из первой табличке).

smile

Заранее благодарен.
Garry



  Вверх
Kurt
Дата 10.11.2004, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

Репутация: 20
Всего: 36



Цитата
Я не увидел явной связи между MyAdapter и myDS

Ну, связь, вроде простая - DataAdapter позволяет автоматизировать работу с DataSet'ом.
Вот смотрите:
Код
myAdapter.Fill(myDS, "superTable");

Т.е. я заполняю DataSet всего одной строчкой. Виноват, двумя строчками, если считать SQL-запрос.
Если делать без DataAdapter, то нужно вручную создавать таблицу в DataSet (DataTable someTable = new DataTable(..)..), исполнять запрос к базе, с помощью DataReader читать, создавать строки в DataTable..
А так - все просто. smile

Цитата
И если не сильно затруднит какой ни будь примерчик:
с mdb - файлом, скажем две связанные таблички и гридами кликнув на какой то записи чтоб открывался диалог с другим гридом и связанными записями (из первой табличке).

Уточните, пожалуйста. Вы хотите все это сделать используя "локальную копию БД"? Т.е. манипулируя уже загруженными DataSet'ами? имхо, проще выполнить соотв. запрос в базу (select то-то и то-то from таблица1, таблица2 where..). Иногда проще выполнить коротенький запрос, чем занимать кучу оперативной памяти, забивая ее данными из таблицы..
Добавлено @ 21:29
P.S. Не хотите зарегистрироваться?
Присоединяйтесь к нам на огонек - мы всегда рады новым людям. smile


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
GarryKI
Дата 15.11.2004, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем добрый день!
Kurt - спасибо за отзыв я зарегистрировался сразу после вопроса (Guest в вопросе теперь GarryKI). Конечно с запросом (SQL) удобнее. С базами и grid-ом у меня все примеры компилировались с ошибками, поэтому я задал этот вопрос. Затем с очередным примером получилось вставить данные запроса в грид при помощи DataAdapter. Но пример:
1. мне нужен что б понять структуру программы, например VS не всегда подхватывает второй файл *.cs и не какие namespace - не помогают, потом в очередной раз закроешь студию, - откроешь и все заработает, - это глюк или я что то не так делаю?
2. VS затирает в блоке инициализации все изменения, если вставлять изменения за комментариями TODO - не всегда все гладко срабатывает (компиляция).
3. Я правильно понимаю - Что для инициализации необходимо использовать метод "frm_load". Или как правильнее?
4. не хотелось бы создавать много OleDbConnection - ов к одной и тойже базе если мне нужны разные таблици из разных форм (одной программы (процесса))? Если это возможно подскажите пожалуйста как, если можно с примером (mdb - достаточно, мне главное понять).

Заранее спасибо
мой e-mail: [email protected]
или ICQ: 172893304
PM MAIL   Вверх
Tomcat
Дата 15.11.2004, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2003
Где: Гродно, Беларусь

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



Я, конечно, не Kurt, но...

1. Здесь не знаю... С такой бедой не сталкивался. Попробуй, может, просто сохранять проект перед компиляцией.
2. Уточни, пожалуйста. Где именно вставляешь, что выдает при ошибке.
3. Нет, такой необходимости нет. Хотя есть зависимость от того, что ты инициализируешь. Я обычно пользуюсь таким способом: все свои инициализации выделяю в отдельный метод формы, MyInit, какой-нибудь, и добавляю его вызов в конструктор.
4. Если работаешь с DataSet, то придется. DataAdapter используется обычно для связи одной таблицы DataSet и одной таблицы самой базы (хотя можно и такой запрос для DataAdapter написать, что связь будет иной, но это уже другие вопросы). Вот и получается, одна таблица - один адаптер.

А по поводу примера, посмотри эти статьи... Помоему, здесь все не плохо расписано.
http://www.aspnetmania.com/Articles/Category/4.html
Только читай их от последней к первой. smile
PM MAIL   Вверх
Srg
Дата 1.2.2005, 11:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Прошу прощения, но я не понял ответ на п.4


Цитата(Tomcat @ 15.11.2004, 11:00)
4. Если работаешь с DataSet, то придется. DataAdapter используется обычно для связи одной таблицы DataSet и одной таблицы самой базы (хотя можно и такой запрос для DataAdapter написать, что связь будет иной, но это уже другие вопросы). Вот и получается, одна таблица - один адаптер.


У себя я создаю один коннект к БД и раздаю его "всем, кто попросит". Например:

Код

public TAddressToDictionary (SqlConnection connection)
{
......
_Cmd = new SqlCommand();
_Cmd.Connection = connection;
.....
}


и таким образом в различных местах.
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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