powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Identity не возвращается в DataTable
44 сообщений из 44, показаны все 2 страниц
Identity не возвращается в DataTable
    #38471279
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема, наверное, заезженная, но каменный цветок не выходит.
Делаю по статье: http://msdn.microsoft.com/en-us/library/ks9f57t0(VS.80).aspx

Код: vbnet
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.
29.
30.
31.
Dim adapter As SqlDataAdapter 
Dim mRS As DataTable 

Open:

                Using cmd As SqlCommand = CreateCommand(pvsSQLString, False)
                    cmd.CommandType = CommandType.Text

                    mRS = New DataTable
                    adapter = New SqlDataAdapter(cmd)
                    adapter.Fill(mRS)

                    Dim builder As New SqlCommandBuilder(adapter)
                    adapter.DeleteCommand = builder.GetDeleteCommand
                    adapter.UpdateCommand = builder.GetUpdateCommand
                    adapter.InsertCommand = builder.GetInsertCommand

                    If Not mObject Is Nothing Then
                        adapter.InsertCommand.CommandText = adapter.InsertCommand.CommandText & ";select " & GetFields(mObject) &  " from " & mObject.SourceTable & " WHERE " & mObject.PrimaryKey & "=SCOPE_IDENTITY();"
                        adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.Both
                        adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
                        AddHandler adapter.RowUpdated, New SqlRowUpdatedEventHandler(AddressOf OnRowUpdated)
                    End If
                End Using

Update:

            Dim dc As DataTable = mRS.GetChanges
            adapter.Update(dc)
            mRS.Merge(dc)
            mRS.AcceptChanges()

При adapter.Update происходит исполнение insert, данные вставляются, но select не происходит (смотрю профайлер), а после adapter.Update InsertCommand.CommandText возвращается измененный, без селекта.

Что я делаю неправильно?

MSSQL 2008 R2
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38471283
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyadapter.InsertCommand.CommandText & ";select " & GetFields(mObject) & " from " & mObject.SourceTable & " WHERE " & mObject.PrimaryKey & "=SCOPE_IDENTITY();"
Мрак...

Уволить без выплаты материального пособия.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38471316
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУAntonariyadapter.InsertCommand.CommandText & ";select " & GetFields(mObject) & " from " & mObject.SourceTable & " WHERE " & mObject.PrimaryKey & "=SCOPE_IDENTITY();"
Мрак...

Уволить без выплаты материального пособия.Спешным образом переделываю на SqlClient одну библиотеку, которая раньше работала на adodb.dll, где с извлечением identity нет проблем (но есть иные проблемы, например, периодический access violation при обращению к Recordset.Fields(x)), поэтому меня устроит любой рабочий говнокод, укладывающийся в интерфейс библиотеки. К сожалению, EF в разумные сроки туда не укладывается.
А конкретно этот мрачный селект взят из MSDN.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38471329
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyК сожалению, EF в разумные сроки туда не укладывается.
Про сроки вообще не понял. Вроде как с EF наоборот быстрее пишется, разве не так?

AntonariyА конкретно этот мрачный селект взят из MSDN.
Да, там много гавнища развелось за все эти годы.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38471380
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУAntonariyК сожалению, EF в разумные сроки туда не укладывается.
Про сроки вообще не понял. Вроде как с EF наоборот быстрее пишется, разве не так?Так, если с нуля. А если есть 500кб исходников, которые нужно перевести на новые рельсы, то быстро не выйдет. До состояния "компилируется" с adodb на датасеты я их перегнал часа за три, аналогичный переход на EF займет дни.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38471397
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

... а mObject точно не Nothing ?
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38471402
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

А почему в выборке используется строка pvsSQLString, а в InsertCommand.CommandText идёт какое-то построение для выборки?
Эти две строки (выборки) между собой коррелируют?
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38471449
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotikAntonariy,

... а mObject точно не Nothing ?Точно.

Alex KuznetsovА почему в выборке используется строка pvsSQLStringЭто селект для исходного датасета. Alex Kuznetsovа в InsertCommand.CommandText идёт какое-то построение для выборки?Потому что делал по примеру. Там инсерт и селект захардкодены:
Код: vbnet
1.
2.
3.
4.
5.
6.
adapter.InsertCommand = New SqlCommand( _
            "INSERT INTO dbo.Shippers (CompanyName) " & _
            "VALUES (@CompanyName); " & _
            "SELECT ShipperID, CompanyName FROM dbo.Shippers " & _
            "WHERE ShipperID = SCOPE_IDENTITY();", _
            connection)

Инсерт мне строит билдер, я добавляю селект. В профайлер в результате падает лишь инсерт.

Alex KuznetsovЭти две строки (выборки) между собой коррелируют?Если бы вторая выборка происходила, то наверняка. Сейчас они выбирают звездочки.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38471951
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Тогда содержимое
Код: c#
1.
pvsSQLString

и того что получается в результате вызова
Код: c#
1.
adapter.InsertCommand.CommandText = adapter.InsertCommand.CommandText & ";select " & GetFields(mObject) &  " from " & mObject.SourceTable & " WHERE " & mObject.PrimaryKey & "=SCOPE_IDENTITY();"

в студию...
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38472293
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvsSQLString = "select * from tblState where 1=2"

Результатом вызова adapter.InsertCommand.CommandText является insert, в таблице появляется новая запись, а вот прилепленный select * from tblState WHERE StateID=SCOPE_IDENTITY(); не выполняется. Этот селект в момент adapter.Update(dc) просто отбрасывается, и если после этого посмотреть adapter.InsertCommand.CommandText, то никакого селекта там уже нет, только инсерт.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38472330
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Попробуйте сделать DataSet с адаптером в дизайнере и посмотрите? что там да как...

Вообще? я для подобных вещей использую вложенную процедуру (если БД позволяет), которая производит вставку данных и возвращает соответствующую строку :
например
Код: sql
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
CREATE PROCEDURE [dbo].spInsertVATPercentage
(
	@cCountryCode char(2),
	@dtValidFrom datetime,
	@dtValidTill datetime,
	@dcmPercentage decimal(5, 2)
)
AS
	SET NOCOUNT OFF;

	IF NOT EXISTS(
	  SELECT * FROM [tbVATPercentage]
	  WHERE cCountryCode = @cCountryCode
	  AND (	@dtValidFrom BETWEEN dtValidFrom AND dtValidTill
		OR  @dtValidTill BETWEEN dtValidFrom AND dtValidTill
	  )
	)
	BEGIN

		INSERT INTO [tbVATPercentage] ([cCountryCode], 
						 [dtValidFrom], 
						 [dtValidTill], 
						 [dcmPercentage]
						 ) 
					VALUES (@cCountryCode, 
						 @dtValidFrom, 
						 @dtValidTill, 
						 @dcmPercentage
						);
	
		SELECT	intID, 
			cCountryCode, 
			dtValidFrom, 
			dtValidTill, 
			dcmPercentage 
		  FROM	tbVATPercentage 
		 WHERE	(intID = SCOPE_IDENTITY())

	 END
	 ELSE
	 BEGIN

		SELECT	TOP 0 
			intID, 
			cCountryCode, 
			dtValidFrom, 
			dtValidTill, 
			dcmPercentage 
		FROM	tbVATPercentage 
	 
	 END

...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38472387
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как гляну на эти типизированные датасеты, так сразу появляются рвотные позывы :)
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38472795
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да меня от любых датасетов тошнит, а от этого дизайнера хочется застрелиться.
Даже пробовать не буду, у меня же динамика, проще вручную пробежаться по новым строкам и нагенерить чистых SqlCommand, возвращающих insert+select, в обход этого душного адаптера.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38473741
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДа меня от любых датасетов тошнит, а от этого дизайнера хочется застрелиться.
Даже пробовать не буду, у меня же динамика, проще вручную пробежаться по новым строкам и нагенерить чистых SqlCommand, возвращающих insert+select, в обход этого душного адаптера.
Ну и как, решил задачу-то?

PS. Иногда типизированные датасэты оченна даже шняшные вещи - особлива когда они просты до безобразия и руками программить их лень
А так да, проще сразу вызвать SQLCommand и пробежаться ридером по записям...
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38473780
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov А так да, проще сразу вызвать SQLCommand и пробежаться ридером по записям...
Проще взять в руки EF и будет щастье.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38473823
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУAlex Kuznetsov А так да, проще сразу вызвать SQLCommand и пробежаться ридером по записям...
Проще взять в руки EF и будет щастье.Ну, так скажем, не всегда будет ЩАСТЬЕ !!!
В данном случае да, будет щастье, а в случае, ежели к примеру источник вообще не БД, а вэб сервис - то с EF щастье наступает в извращённой форме... в виде собственного провайдера...
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38473903
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsovа в случае, ежели к примеру источник вообще не БД, а вэб сервис - то с EF щастье наступает в извращённой форме... в виде собственного провайдера...
Если источник не БД, а веб сервис, то с EF хоть обизвращайся, работать не будет. В этом случае - кодогенерированная прокси служба-класс. Каждой задаче свои инструменты. К чему этот спич?
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474023
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Antonariy,

А вы уверены что GetFields(mObject) возвращает список полей через запятую?
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474054
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ... Каждой задаче свои инструменты...Абсолютно согласен

МСУК чему этот спич? Да вот сейчас с MVC 4 работаю, по условиям задачи данные будут приходить от и обрабатываться сторонним вэб сервисом (не моим ). Думал, как-бы так прикрутить к этому безобразию EF, ну чтоб почти "как по книжке" , ан нет, "как по книжке" с EF в данном случае не сработаешь - токмо через (___o___), т.е. свой провайдер
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474132
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovAntonariyДа меня от любых датасетов тошнит, а от этого дизайнера хочется застрелиться.
Даже пробовать не буду, у меня же динамика, проще вручную пробежаться по новым строкам и нагенерить чистых SqlCommand, возвращающих insert+select, в обход этого душного адаптера.
Ну и как, решил задачу-то?Пока нет, случайно удалось вправить мозги adodb. Рекордсет из создающей его процедуры передавался через свойство моего класса, а когда стал возвращать его напрямую, глюки исчезли. Мистика, блеать, причем проявляющаяся только в случае, когда выполняется хранимка, использующая sp_cursoropen + sp_cursorfetch + sp_cursorclose. Процедура возвращает набор записей, и при перемещению по нему рекордсет в рандомный момент либо ВНЕЗАПНО оказывался закрытым либо выдавал access violation при обращении к полю. Причем, если между вызовами MoveNext происходят еще какие-то запросы к базе, глюк практически гарантирован. Я даже пробовал создавать чистенький дубль рекордсета в памяти, чтобы вообще никакой связи с базой, все равно глючило.

Cat2А вы уверены что GetFields(mObject) возвращает список полей через запятую?Она возвращала звездочку. А тут обязательно перечисление полей?
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474153
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovДа вот сейчас с MVC 4 работаю, по условиям задачи данные будут приходить от и обрабатываться сторонним вэб сервисом (не моим ). Думал, как-бы так прикрутить к этому безобразию EF, ну чтоб почти "как по книжке" , ан нет, "как по книжке" с EF в данном случае не сработаешь - токмо через (___o___), т.е. свой провайдер
Ну так делай свой IDataContext отдельным проектом, через IoC общайся с ним из основного MVC приложения. Всё тоже самое, по сути. Только прокси службу по WSDL тебе сгенерит не EF, а Service Reference генератор.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474211
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУAlex Kuznetsovskiped...
Ну так делай свой IDataContext отдельным проектом, через IoC общайся с ним из основного MVC приложения. Всё тоже самое, по сути. Только прокси службу по WSDL тебе сгенерит не EF, а Service Reference генератор.Делать свой IDataContext ещё то извращение... Лучше уж свои модели реализующие IEnumerable и скрывающие обращение к вэб сервисам...
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474241
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AntonariyА тут обязательно перечисление полей?
Необязательно, но если поля бы были без разделения, то именно такая ошибка и была.
Текст-то запроса собирает правильно?
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474269
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2AntonariyА тут обязательно перечисление полей?
Необязательно, но если поля бы были без разделения, то именно такая ошибка и была.
Текст-то запроса собирает правильно?Инсерт правильно, запись-то вставляется. Вот селект:
Код: sql
1.
select * from tblState WHERE StateID=SCOPE_IDENTITY();

Не знаю, что тут может быть не правильно.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474277
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я бы все же попробовал с Output-параметрами.

Например

adapter.InsertCommand.Parameters.Add("@CompanyName", SqlDbType.Varcahr, 400);
adapter.InsertCommand.Parameters.Add("@ShipperID", SqlDbType.Int);
adapter.InsertCommand.Parameters["@ShipperID"].Direction = ParameterDirection.Output;

Текст запроса:

INSERT INTO dbo.Shippers (CompanyName) VALUES (@CompanyName);
@ShipperID = SCOPE_IDENTITY()
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474282
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Необязательно, но если поля бы были без разделения, то именно такая ошибка и была.А никакой ошибки и нет, собственно. Есть отсутствие действия, которое по идее должно произойти — выбор identity.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474284
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Cat2adapter.InsertCommand.Parameters.Add("@CompanyName", SqlDbType.Varcahr, 400);
Лишнее при автогенерации запросов адаптера
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474289
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AntonariyCat2Необязательно, но если поля бы были без разделения, то именно такая ошибка и была.А никакой ошибки и нет, собственно. Есть отсутствие действия, которое по идее должно произойти — выбор identity.
Разделенные запятой запросы не выполняются в одной транзакции. Если бы была ошибка синтаксиса, то второй запрос не выполнился бы из-за ошибки на сервере. В трассе бы его не показало. Все симптомы, как у Вас
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474297
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Cat2Разделенные запятой запросыТочкой с запятой
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474310
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Я бы все же попробовал с Output-параметрами.

Например

adapter.InsertCommand.Parameters.Add("@CompanyName", SqlDbType.Varcahr, 400);
adapter.InsertCommand.Parameters.Add("@ShipperID", SqlDbType.Int);
adapter.InsertCommand.Parameters["@ShipperID"].Direction = ParameterDirection.Output;

Текст запроса:

INSERT INTO dbo.Shippers (CompanyName) VALUES (@CompanyName);
@ShipperID = SCOPE_IDENTITY()Зачем мне output-параметр? Чтобы сделать лишний запрос к базе? Мне нужна новая запись за один запрос, и я могу ее получить в обход адаптера.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474313
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Antonariyпропущено...
А никакой ошибки и нет, собственно. Есть отсутствие действия, которое по идее должно произойти — выбор identity.
Разделенные запятой запросы не выполняются в одной транзакции. Если бы была ошибка синтаксиса, то второй запрос не выполнился бы из-за ошибки на сервере. В трассе бы его не показало. Все симптомы, как у ВасТо есть адаптер выполняет только первый запрос, и пример с MSDN чуть более чем полное фуфло?
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474321
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2В трассе бы его не показало.В трассе показало бы ошибку, их я тоже трассирую. Но и там ошибки не было.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474334
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovМСУпропущено...

Ну так делай свой IDataContext отдельным проектом, через IoC общайся с ним из основного MVC приложения. Всё тоже самое, по сути. Только прокси службу по WSDL тебе сгенерит не EF, а Service Reference генератор.Делать свой IDataContext ещё то извращение... Лучше уж свои модели реализующие IEnumerable и скрывающие обращение к вэб сервисам...
Ты какую-то чушь написал. Точно понял, о чём речь?
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474394
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AntonariyТо есть адаптер выполняет только первый запрос, и пример с MSDN чуть более чем полное фуфло?
Примерно так.

InsertCommand предназначена для работы через adapter.Update, которая вызывается на событие принятия изменений данных в строке таблицы. При этом в DataTable инкрементное поле обычно получает какое-то значение. Null, если для поля в DataTable не задан инкремент. Обычно задается начальное значение -1, шаг -1.

После вставки строки в таблицы базы он Update возвращает значения поле в ПАРАМЕТРАХ, причем параметры должны быть привязаны к полям DataTable.
Поскольку у меня привязка обычно идет через визуальные контролы, то я забыл написать в примере написать.

adapter.InsertCommand.Parameters["@ShipperID"].SourceColumn = "ShipperID";

========================

Для того, что бы получить вставленную строку без Update надо выполнить InsertCommand отдельно

adapter.InsertCommand.ExecuteReader();

Но при этом она не вставит строку в DataTable !
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474509
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Пока отвечал, десять раз отрывали. Прочитал - запутанно написал.

Резюме.

1. adapter.Update не может возвратить рекордсет. Он возвращает только количество затронутых записей. Получить данные из него можно через output-параметры запроса.

2. Запрос выполненный не через adapter.Updatе ничего не меняет в DataTable
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474551
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Примерно так.
Ясно.
Cat21. adapter.Update не может возвратить рекордсет. Он возвращает только количество затронутых записей. Получить данные из него можно через output-параметры запроса.Получается, адаптер не может сам вернуть новые записи, в любом случае придется делать свой запрос?

Cat22. Запрос выполненный не через adapter.Updatе ничего не меняет в DataTableСамо собой.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474609
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AntonariyПолучается, адаптер не может сам вернуть новые записи, в любом случае придется делать свой запрос?

Адаптер возвращает записи только при вызове методов Fill/GetData
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474633
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сделайте как я написал выше, с output-параметром.

Лучше бы, конечно, обернуть в хранимую процедуру, но у Вас уважительная причина - надо быстро, сделать, а потом оптимизировать.

Хотя... Часто реализация решений "в лоб" в итоге занимают больше времени, чем продуманных.

Не люблю SqlCommandBuilder. Хрен знает, что там получиться.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474650
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Сделайте как я написал выше, с output-параметром.

Лучше бы, конечно, обернуть в хранимую процедуру, но у Вас уважительная причина - надо быстро, сделать, а потом оптимизировать.Ок, попробую. Правда быстро уже не надо, adodb больше не глючит.
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38474828
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Antonariyadodb больше не глючит.
adodb не существует уже. Есть ADO.NET/

Оно не глючит. Глюки появляются при его неправильном использовании
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38475655
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУAlex Kuznetsovпропущено...
Делать свой IDataContext ещё то извращение... Лучше уж свои модели реализующие IEnumerable и скрывающие обращение к вэб сервисам...
Ты какую-то чушь написал. Точно понял, о чём речь?Возможно не совсем... Ткни носом в описание IDataContext, как ты его понимаешь... А то поиск по MSDN внятного ничего не дал...
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38475657
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovВозможно не совсем... Ткни носом в описание IDataContext, как ты его понимаешь... А то поиск по MSDN внятного ничего не дал...
Так это просто абстракция :) Вообщем, начинай читать от сюда http://msdn.microsoft.com/en-us/library/ff921087.aspx
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38475871
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Antonariyadodb больше не глючит.
adodb не существует уже. C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\adodb.dll
...
Рейтинг: 0 / 0
Identity не возвращается в DataTable
    #38476073
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyТема, наверное, заезженная, но каменный цветок не выходит.
Делаю по статье: http://msdn.microsoft.com/en-us/library/ks9f57t0(VS.80).aspx

Код: vbnet
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.
29.
30.
31.
Dim adapter As SqlDataAdapter 
Dim mRS As DataTable 

Open:

                Using cmd As SqlCommand = CreateCommand(pvsSQLString, False)
                    cmd.CommandType = CommandType.Text

                    mRS = New DataTable
                    adapter = New SqlDataAdapter(cmd)
                    adapter.Fill(mRS)

                    Dim builder As New SqlCommandBuilder(adapter)
                    adapter.DeleteCommand = builder.GetDeleteCommand
                    adapter.UpdateCommand = builder.GetUpdateCommand
                    adapter.InsertCommand = builder.GetInsertCommand

                    If Not mObject Is Nothing Then
                        adapter.InsertCommand.CommandText = adapter.InsertCommand.CommandText & ";select " & GetFields(mObject) &  " from " & mObject.SourceTable & " WHERE " & mObject.PrimaryKey & "=SCOPE_IDENTITY();"
                        adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.Both
                        adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
                        AddHandler adapter.RowUpdated, New SqlRowUpdatedEventHandler(AddressOf OnRowUpdated)
                    End If
                End Using

Update:

            Dim dc As DataTable = mRS.GetChanges
            adapter.Update(dc)
            mRS.Merge(dc)
            mRS.AcceptChanges()

При adapter.Update происходит исполнение insert, данные вставляются, но select не происходит (смотрю профайлер), а после adapter.Update InsertCommand.CommandText возвращается измененный, без селекта.

Что я делаю неправильно?

MSSQL 2008 R2 Все (почти) правильно: this is not a bug - it's a feature. :)
Вместо builder.GetXXXCommand попробуйте использовать builder.GetXXXCommand.Clone.
И кроме adapter.Update(dc) больше ничего не нужно для получения новых значений идентити с сервера обратно в программу - без выполнения дополнительных запросов к серверу и без лишних обработчиков.

Пример (на С#) с SqlCommandBuilder можно посмотреть, например, тут ...
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Identity не возвращается в DataTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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