Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как считать возвращаемые значения output / 25 сообщений из 32, страница 1 из 2
31.01.2016, 19:05
    #39159548
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
Добрый день.

Никак не могу понять в какой способ из C# ADO.NET можно получить значения уникального автоинкрементирующего поля для вновь добавленных строк.

Вот код для вставки в базу данных нескольких строк:

Код: sql
1.
2.
3.
4.
5.
DECLARE @MyTableVar table(outid lint, outname varchar(100));
INSERT Production.name, Production.createddate
OUTPUT INSERTED.outid, INSERTED.outname INTO @MyTableVar
VALUES ('Первая запись', GETDATE()), ('Вторая запись', GETDATE()), ('Третья запись', GETDATE());
SELECT * FROM @MyTableVar;



Но как вызвать данный код на исполнение через ASP.NET SqlDataReader?

Поделитесь рабочим примером, пожалуйста.
...
Рейтинг: 0 / 0
31.01.2016, 19:08
    #39159551
T87
T87
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
zalsilyДобрый день.

Никак не могу понять в какой способ из C# ADO.NET можно получить значения уникального автоинкрементирующего поля для вновь добавленных строк.

Вот код для вставки в базу данных нескольких строк:

Код: sql
1.
2.
3.
4.
5.
DECLARE @MyTableVar table(outid lint, outname varchar(100));
INSERT Production.name, Production.createddate
OUTPUT INSERTED.outid, INSERTED.outname INTO @MyTableVar
VALUES ('Первая запись', GETDATE()), ('Вторая запись', GETDATE()), ('Третья запись', GETDATE());
SELECT * FROM @MyTableVar;



Но как вызвать данный код на исполнение через ASP.NET SqlDataReader?

Поделитесь рабочим примером, пожалуйста.
Передать параметр также как и инпут, только тип ему задать аутпут.
...
Рейтинг: 0 / 0
31.01.2016, 19:10
    #39159552
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
Да, но этот параметр должен содержать не одно конкретное значение, а целый набор записей (с полями).

Пытаюсь и та, и сяк и никак не сработает, постоянно ошибки при исполнении вываливаются.
...
Рейтинг: 0 / 0
31.01.2016, 20:05
    #39159565
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
Ну не понятно как я могу "распарсить" оутпут параметр и вытянуть из него значения полей набора строк. Нигде не могу найти как такое реализовывается, только есть примеры с оутпут параметром типа varchar,int, bit. А вот типа table нет нигде.
...
Рейтинг: 0 / 0
31.01.2016, 22:10
    #39159615
T87
T87
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
zalsily,

Давайте по порядку. Почему у вас вставляется сразу несколько записей? Откуда они приходят? Из вашего приложения?
...
Рейтинг: 0 / 0
01.02.2016, 12:54
    #39160019
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
Да, с приложения приходит список List<UserType> manyrows;
Каждый элемент списка представляет собой объект с полями, значения которых должны быть перенесены в бд.

Так, 10 элементов списка должны стать 10 записями в таблице.

Множественную вставку выполнить через инструкции ADO.NET (C#) не есть проблема, и не есть проблема получить скоупидентити id последней вставленной записи, но в данном случае надо получить id всех вставленных записей (и желательно еще и значения нескольких других полей записей).
...
Рейтинг: 0 / 0
01.02.2016, 13:09
    #39160055
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
zalsily, msdn
...
Рейтинг: 0 / 0
01.02.2016, 13:23
    #39160086
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
Axeleron, простите, но чет не понял как это помогает решить вопрос. Возможно просто не догоняю, но пока не могу понять. Меня больше интересует сам механизм получения набора строк из аутпут параметра.
...
Рейтинг: 0 / 0
01.02.2016, 13:26
    #39160089
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
zalsilyAxeleron, простите, но чет не понял как это помогает решить вопрос. Возможно просто не догоняю, но пока не могу понять. Меня больше интересует сам механизм получения набора строк из аутпут параметра.
Какой набор строк в output параметрах? Накой тогда ридер нужен?
...
Рейтинг: 0 / 0
01.02.2016, 13:30
    #39160096
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
Axeleron, а как вообще получить на выходе перечень id-шек новых записей?
...
Рейтинг: 0 / 0
01.02.2016, 13:32
    #39160102
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
zalsilyAxeleron, а как вообще получить на выходе перечень id-шек новых записей?
А нужны id всех новых записей? А зачем?
...
Рейтинг: 0 / 0
01.02.2016, 13:33
    #39160105
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
Вариант новым запросом считать строки, которые были добавлены по определенному параметру не проходит так как одновременнно в базу могут писаться несколько таких наборов вставляемых записей. Поэтому отследить и получить значения поля id вставленных строк можно непосредственно вовремя их вставки. Другого пути в данном случае нет.

Ну можно попробовать создать дополнительную таблицу в бд для хранения этой информации. Но мне кажется это уж слишком грабельно.
...
Рейтинг: 0 / 0
01.02.2016, 13:39
    #39160121
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
AxeleronzalsilyAxeleron, а как вообще получить на выходе перечень id-шек новых записей?
А нужны id всех новых записей? А зачем?
Ок, предположим, что реально надо. Тогда курсором делать в ХП и по одной записи вставлять и получать ID, запихивать во временную таблицу, а потом возвращать список ID'шек и читать DataReader'ом.
...
Рейтинг: 0 / 0
01.02.2016, 13:43
    #39160135
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
Axeleron, ну вот, анверное, в этом направлении и придется реализовывать.
...
Рейтинг: 0 / 0
01.02.2016, 13:46
    #39160143
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
...
Рейтинг: 0 / 0
01.02.2016, 13:47
    #39160147
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
...
Рейтинг: 0 / 0
01.02.2016, 14:55
    #39160258
VAlexey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
zalsilyпостоянно ошибки при исполнении вываливаются

Может быть текст ошибки приведете? Что за тип колонки такой lint в Вашем скрипте? В SQL Server такого нет.
...
Рейтинг: 0 / 0
01.02.2016, 15:07
    #39160272
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
VAlexey,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DECLARE @AddedRows table(productid int); 
INSERT  (Product.marketid, Product.createdate, Product.name) 
   INTO Products 
		
	OUTPUT INSERTED.id INTO @AddedRows 

VALUES 
	(1359, 01.02.2016 13:34:45, 'Товар №134655849'), 
	(1312, 01.02.2016 13:34:45, 'Товар №251352345')
	(1304, 01.02.2016 13:34:45, 'Товар №323459901'), 
	(1702, 01.02.2016 13:34:45, 'Товар №842573357'); 


SELECT * FROM @AddedRows;



Error Mesage: Incorrect syntax near '('
...
Рейтинг: 0 / 0
01.02.2016, 15:16
    #39160285
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
* в скрипте запятая на второй строке имеется, просто некорректно перенес в форум
...
Рейтинг: 0 / 0
01.02.2016, 15:16
    #39160286
VAlexey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
1) Пропущена запятая между значениями в предложении VALUES
2) Значения дат надо передавать в правильном формате (и при том в лучше независящем от текущего формата дат пользователя: например, ODBC формат либо '20160201 13:34:45')
...
Рейтинг: 0 / 0
01.02.2016, 15:20
    #39160292
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
VAlexey, убрал поле даты, запятая есть. Ошибка также осталась.
...
Рейтинг: 0 / 0
01.02.2016, 15:21
    #39160293
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
VAlexey1) Пропущена запятая между значениями в предложении VALUES
2) Значения дат надо передавать в правильном формате (и при том в лучше независящем от текущего формата дат пользователя: например, ODBC формат либо '20160201 13:34:45')
+1, и еще Product.name должен быть NVARCHAR
...
Рейтинг: 0 / 0
01.02.2016, 15:28
    #39160299
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
Axeleron, так в определении этого поля указан тип nvarchar.

Или что еще в скрипте надо указать?
...
Рейтинг: 0 / 0
01.02.2016, 15:31
    #39160301
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
zalsily,
N 'Товар №134655849'
...
Рейтинг: 0 / 0
01.02.2016, 15:34
    #39160303
zalsily
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать возвращаемые значения output
Axeleron, не помогло. Та же ошибка.

Возможно сам скрипт кривой?
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как считать возвращаемые значения output / 25 сообщений из 32, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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