Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / SQL Server programming VS. ADO.NET programming / 8 сообщений из 8, страница 1 из 1
15.04.2004, 16:09
    #32483055
SamMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL Server programming VS. ADO.NET programming
Такой вопрос: вот создаем мы на SQL сервере новую БД на пару-тройку таблиц. Пишем всякие CREATE TABLE, определяем колонки, раскидываем Primary/Foreign Key Constraints, определяем связи между таблицами, назначаем дефолтные значения колонкам - короче паримся и напрягаемся. Наконец, довольные результатом,
открываем VisualStudio и создаем из только что созданных таблиц типизированный датасет. И что видим? Автоматом в этот датасет перешел ТОЛЬКО первичный ключ каждой таблицы. Дефолтные значения - мимо, релейшены - мимо и т.д. Отсюда - а нужно ли было столько усилий в программировании дизайна таблиц на сервере, если потом весь дизайн фактически заново надо пересоздавать на ADO.NET? Может программить сервер вообще не стоит, а создавать всю структуру хранилища данных прямо в дизанере типизированного датасета? Ведь end-user все равно никогда не будет править данные непосредственно на сервере, а будет пользоваться для этого нашим приложением, которое, в свою очередь, работает с сервером опосредованно через тот же датасет. И более общий вопрос: а что почитать о программировании связки SQL Server+ADO.NET? Как программить каждое в отдельности - об этом уже тонны книг/статей есть, а вот как распределить усилия программера между тем и этим... Я, конечно, понимаю, что ADO.NET суть высокоуровневая обертка в программировании SQL сервера так что говоря об одном неизбежно выйдешь на другое, но тем не менее - вопрос баланса(см. выше). Заранее спасибо всем.
...
Рейтинг: 0 / 0
15.04.2004, 16:29
    #32483095
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL Server programming VS. ADO.NET programming
Я вообще непонимаю смысл дата сета с набором всяких таблиц и связей.

Зачем? я уже со всеми связями и прочей лабудой должен загнать на клиент и показать пользователю.

Клиенское приложение вообще недолжно занематься связями, выборкой локально, что-то строить. Это должен делать сервер.

В DataSet удобно хранить нужные выборки и переодически их подкачивать с серверя для показа пользователю.
...
Рейтинг: 0 / 0
17.04.2004, 01:38
    #32485198
SamMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL Server programming VS. ADO.NET programming
Так в том то и вопрос - как я могу загнать на клиента(клиент на ADO.NET) всю структуру своей БД с SQL сервера? По моим наблюдениям я могу загнать:
1)Кол-во и названия таблиц
2)Кол-во и названия колонок в каждой таблице
3)Типы данных, хранимой каждой колонкой
4)Примари кей каждой таблицы
Все. А, допустим, связи? На сервере они определены и SQL их знает. Как их автоматом перегнать в клиента, что бы не создавать ручками в датасете?
...
Рейтинг: 0 / 0
17.04.2004, 06:03
    #32485211
josia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL Server programming VS. ADO.NET programming
Это моя первая программа на C#, не судите строго.
Код: plaintext
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.
static void Main(string[] args)
{
      SqlConnection myConnection;
      myConnection = new SqlConnection( "integrated security=SSPI;data source=\" .\ ";initial Catalog=pubs" );
      myConnection.Open();

      SqlCommand myCommand = new SqlCommand(
         "SELECT col1.name AS fcolumn, so1.name AS ftable, "  
        +  "col2.name AS rcolumn, so2.name AS rtable, fk.keyno " 
        +  "FROM sysforeignkeys fk " 
        +  "INNER JOIN syscolumns col1 ON fk.fkey = col1.colid AND fk.fkeyid = col1.id " 
        +  "INNER JOIN sysobjects so1 ON fk.fkeyid = so1.id " 
        +  "INNER JOIN syscolumns col2 ON fk.rkey = col2.colid AND fk.rkeyid = col2.id " 
        +  "INNER JOIN sysobjects so2 ON fk.rkeyid = so2.id" 
        ,myConnection
        );

      SqlDataReader myDR = myCommand.ExecuteReader();
      while (myDR.Read())
      {
        Console.WriteLine( "FOREIGN KEY "  + myDR[ "ftable" ] +  "("  +
          myDR[ "fcolumn" ].ToString() +  ") REFERENCES "  +
          myDR[ "rtable" ] +  "("  +
          myDR[ "rcolumn" ].ToString() +  ")" 
          );
      }
      myDR.Close();
      myConnection.Close();
}

На самом деле картинка которую она показывает не совсем точная (составные ключи разбиты по отдельным колонкам).
Результат работы:
FOREIGN KEY titles(pub_id) REFERENCES publishers(pub_id)
FOREIGN KEY titleauthor(au_id) REFERENCES authors(au_id)
FOREIGN KEY titleauthor(title_id) REFERENCES titles(title_id)
FOREIGN KEY sales(stor_id) REFERENCES stores(stor_id)
FOREIGN KEY sales(title_id) REFERENCES titles(title_id)
FOREIGN KEY roysched(title_id) REFERENCES titles(title_id)
FOREIGN KEY discounts(stor_id) REFERENCES stores(stor_id)
FOREIGN KEY pub_info(pub_id) REFERENCES publishers(pub_id)
FOREIGN KEY employee(job_id) REFERENCES jobs(job_id)
FOREIGN KEY employee(pub_id) REFERENCES publishers(pub_id)
...
Рейтинг: 0 / 0
20.04.2004, 14:41
    #32487887
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL Server programming VS. ADO.NET programming
Я вообще непонимаю смысл дата сета с набором всяких таблиц и связей.

Зачем? я уже со всеми связями и прочей лабудой должен загнать на клиент и показать пользователю.

в принципе согласен. НО иногда еще в обычном ADO мне пару раз приходилось делать извратный Left Outer Join уже на клиенте - просто чтобы сэкономить траффик: объединение левой таблицы в пару тысяч коротких записей, с правой таблицей в сотню длинных записей - дает выигрыш в мегабайты, что особенно ощутимо для удаленных пользователей...
...
Рейтинг: 0 / 0
20.04.2004, 14:50
    #32487911
Hermitap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL Server programming VS. ADO.NET programming
а насколько быстро это операция проводилась?
...
Рейтинг: 0 / 0
22.04.2004, 15:50
    #32492110
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL Server programming VS. ADO.NET programming
раз в пять медленнее чем если бы это делал сервер, но за счет сокращения объема пересылки через горлышко канала связи - всего раза в полтора медленне, но все равно быстрее, чем печать отчета на принтере :-)
Тоесть для пользователя - результат не ухудшился, а зато в это время другие юзера могли спокойно работать - узкое канал-то я разгрузил, и серъезно!!!
...
Рейтинг: 0 / 0
22.04.2004, 15:58
    #32492151
Hermitap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL Server programming VS. ADO.NET programming
Ну разве что для этого. Согласен. для удаленных работ.
Но неболее. В других случаях (нормальная локалка), это забота сервера.....
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / SQL Server programming VS. ADO.NET programming / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]