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

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

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

В DataSet удобно хранить нужные выборки и переодически их подкачивать с серверя для показа пользователю.
...
Рейтинг: 0 / 0
SQL Server programming VS. ADO.NET programming
    #32485198
SamMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в том то и вопрос - как я могу загнать на клиента(клиент на ADO.NET) всю структуру своей БД с SQL сервера? По моим наблюдениям я могу загнать:
1)Кол-во и названия таблиц
2)Кол-во и названия колонок в каждой таблице
3)Типы данных, хранимой каждой колонкой
4)Примари кей каждой таблицы
Все. А, допустим, связи? На сервере они определены и SQL их знает. Как их автоматом перегнать в клиента, что бы не создавать ручками в датасете?
...
Рейтинг: 0 / 0
SQL Server programming VS. ADO.NET programming
    #32485211
Фотография josia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это моя первая программа на 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
SQL Server programming VS. ADO.NET programming
    #32487887
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще непонимаю смысл дата сета с набором всяких таблиц и связей.

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

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


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