dev.net.ua

Українська Спільнота Розробникiв
 
Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога | Увійти Live ID
в Пошук

Как, используя DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

Останнє повідомлення 19-12-2006, 8:25 від slash. 10 відповіді.
Сортувати: Попереднє Наступне
  •  19-12-2006, 3:15 1382

    Как, используя DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    Как, используя DataSet и DataAdapter, после того как я сам добавляю в DataSet строку без первичного ключа (и возможно некоторых других полей которые генерируются в базе автоматически), обновляю DB используя метод Update адаптера, получить эту строку с остальными значениями? При этом не используя дополнительные вызовы к базе и желательно не делая пакетного запроса в Insert команде адаптера типа

                 @"INSERT INTO T_LAB_ITEM(lab_item_group_id, name_id, name_description) VALUES (@lab_item_group_id, @name_id, @name_description);
     SELECT lab_item_id, lab_item_group_id, name_id, name_description, unitsFROM T_LAB_ITEM WHERE (lab_item_id = @@IDENTITY)";

    у меня нетипизированный  DataSet!



    С уважением, Вячеслав
  •  19-12-2006, 4:19 1383 у відповідь на 1382

    Re: Как, использую DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    Вопрос по тому, как выбрать автогенерируемые поля из базы или как их получить в DataSet'е?

    Если первое и СУБД SQL Server 2005, посмотри в сторону OUTPUT clause для INSERT/UPDATE/DELETE запросов.

    Ссылка в BOL: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/41b9962c-0c71-4227-80a0-08fdc19f5fe4.htm

    Вот неплохой пример: http://blogs.msdn.com/sqltips/archive/2005/06/13/output_clause.aspx

    Помічено як: ,
  •  19-12-2006, 4:24 1384 у відповідь на 1383

    Re: Как, использую DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    kosinsky:

    Вопрос по тому, как выбрать автогенерируемые поля из базы или как их получить в DataSet'е?

    Если первое и СУБД SQL Server 2005, посмотри в сторону OUTPUT clause для INSERT/UPDATE/DELETE запросов.

    Ссылка в BOL: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/41b9962c-0c71-4227-80a0-08fdc19f5fe4.htm

    Вот неплохой пример: http://blogs.msdn.com/sqltips/archive/2005/06/13/output_clause.aspx



    К сожалению, SQL Server 2000.

    С уважением, Вячеслав
  •  19-12-2006, 4:39 1385 у відповідь на 1384

    Re: Как, использую DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    Тогда можно написать тригер, который будет делать SELECT * from Inserted и при помощи опции disallow results from triggers, разрешить ему возвращать ResultSet в вызывающую сессию.

    Недостаток, что эта опция действует на весь сервер.

    Помічено як:
  •  19-12-2006, 5:31 1386 у відповідь на 1385

    Re: Как, использую DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    kosinsky:

    Тогда можно написать тригер, который будет делать SELECT * from Inserted и при помощи опции disallow results from triggers, разрешить ему возвращать ResultSet в вызывающую сессию.

    Недостаток, что эта опция действует на весь сервер.



    Так точно не годится, я уже начинаю думать что проще будет просто отдельный SELECT сделать.

    С уважением, Вячеслав
  •  19-12-2006, 5:45 1387 у відповідь на 1386

    Re: Как, использую DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    Других способов просто нет. Нужно писать возврат в самом запросе. Но я бы рекомендовал завернуть логику обновления в хранимую процедуру, а не посылать батч каждый раз.

     

  •  19-12-2006, 5:53 1388 у відповідь на 1387

    Re: Как, использую DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    kosinsky:

    Других способов просто нет. Нужно писать возврат в самом запросе. Но я бы рекомендовал завернуть логику обновления в хранимую процедуру, а не посылать батч каждый раз.

     

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


    С уважением, Вячеслав
  •  19-12-2006, 6:05 1389 у відповідь на 1388

    Re: Как, использую DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    1.  Производительность
      1. Больше данных передаеться по сети
      2. Больше вероятность перекопиляции запроса, она почти 100%
    2. Нужно иметь права на таблицы куда будет делаться обновление. А в ситуации с sp, можно построить, так называемую row level security, используя ownership chain (2000 и 2005) или EXECUTE AS (2005)
    3. Качество кода
      1. Если нужно вызвать во многих местах, то будет дублирование
      2. Больше вероятность написать запрос поддерженный SQL Injection, т.к. можно полениться и гдето сделать конкатенацию вместо параметра

     

     

    Помічено як:
  •  19-12-2006, 6:18 1390 у відповідь на 1389

    Re: Как, использую DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    1.  Производительность
      1. Больше данных передаеться по сети

    А какая разница что я получу данные запросом включенным в батч или вызову отдельно? Размер данных ведь не изменится?Embarrassed
    А вдобавок к этому надо заново открывать соединение с базой для отдельного вызова хранимой процедуры, не будут это такие же расходы что и на разбор батча?


    • Качество кода
    • Если нужно вызвать во многих местах, то будет дублирование
    • Больше вероятность написать запрос поддерженный SQL Injection, т.к. можно полениться и гдето сделать конкатенацию вместо параметра

    Это скорее зависит от программиста, чем особенность батча, хотя, конечно если их много, но у меня не более 5.Smile

     


    С уважением, Вячеслав
  •  19-12-2006, 8:07 1392 у відповідь на 1390

    Re: Как, использую DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    А какая разница что я получу данные запросом включенным в батч или вызову отдельно? Размер данных ведь не изменится?Embarrassed

    Я про размер запроса который отсылаеться.

    А вдобавок к этому надо заново открывать соединение с базой для отдельного вызова хранимой процедуры, не будут это такие же расходы что и на разбор батча?

    Зачем заново отсылать соединение, кол-во открытий закрытий соединений и для батчей и для SP одинаково.

    Это скорее зависит от программиста, чем особенность батча, хотя, конечно если их много, но у меня не более 5.Smile

    Человеку свойственно ошибаться, а програмисту писать код за который потом стыдно. Smile. Вы в себе уверенны на 100%? А в других учасниках проекта? Я нет, даже в себе. Smile

    По этому предпочитаю пользоваться (заставлять членов своей команды) sp, и быть уверенным, что даже случайно не устрою SQL Injection. Проще, автоматически проверить, что все обращения к БД идут через sp или view, чем выполнять ревью кода на SQL Injection.



     

  •  19-12-2006, 8:25 1394 у відповідь на 1392

    Re: Как, использую DataSet и DataAdapter после добавления в DataSet строки без некоторых полей которые генерируются в базе автоматически

    kosinsky:

    А какая разница что я получу данные запросом включенным в батч или вызову отдельно? Размер данных ведь не изменится?Embarrassed

    Я про размер запроса который отсылаеться.

    А вдобавок к этому надо заново открывать соединение с базой для отдельного вызова хранимой процедуры, не будут это такие же расходы что и на разбор батча?

    Зачем заново отсылать соединение, кол-во открытий закрытий соединений и для батчей и для SP одинаково.

    Это скорее зависит от программиста, чем особенность батча, хотя, конечно если их много, но у меня не более 5.Smile

    Человеку свойственно ошибаться, а програмисту писать код за который потом стыдно. Smile. Вы в себе уверенны на 100%? А в других учасниках проекта? Я нет, даже в себе. Smile

    По этому предпочитаю пользоваться (заставлять членов своей команды) sp, и быть уверенным, что даже случайно не устрою SQL Injection. Проще, автоматически проверить, что все обращения к БД идут через sp или view, чем выполнять ревью кода на SQL Injection.




    На самом деле обращения идут с использованием sp и без техники где возможна SQL Injection, а про свойственно ошибаться это понятноBig Smile.


    С уважением, Вячеслав
Переглядати як новосний Блог RSS в XML