|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Тема, наверное, заезженная, но каменный цветок не выходит. Делаю по статье: 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.
При adapter.Update происходит исполнение insert, данные вставляются, но select не происходит (смотрю профайлер), а после adapter.Update InsertCommand.CommandText возвращается измененный, без селекта. Что я делаю неправильно? MSSQL 2008 R2 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 14:31 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Antonariyadapter.InsertCommand.CommandText & ";select " & GetFields(mObject) & " from " & mObject.SourceTable & " WHERE " & mObject.PrimaryKey & "=SCOPE_IDENTITY();" Мрак... Уволить без выплаты материального пособия. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 14:32 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
МСУ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. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 14:47 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
AntonariyК сожалению, EF в разумные сроки туда не укладывается. Про сроки вообще не понял. Вроде как с EF наоборот быстрее пишется, разве не так? AntonariyА конкретно этот мрачный селект взят из MSDN. Да, там много гавнища развелось за все эти годы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 14:53 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
МСУAntonariyК сожалению, EF в разумные сроки туда не укладывается. Про сроки вообще не понял. Вроде как с EF наоборот быстрее пишется, разве не так?Так, если с нуля. А если есть 500кб исходников, которые нужно перевести на новые рельсы, то быстро не выйдет. До состояния "компилируется" с adodb на датасеты я их перегнал часа за три, аналогичный переход на EF займет дни. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 15:12 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Antonariy, ... а mObject точно не Nothing ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 15:21 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Antonariy, А почему в выборке используется строка pvsSQLString, а в InsertCommand.CommandText идёт какое-то построение для выборки? Эти две строки (выборки) между собой коррелируют? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 15:25 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
carrotikAntonariy, ... а mObject точно не Nothing ?Точно. Alex KuznetsovА почему в выборке используется строка pvsSQLStringЭто селект для исходного датасета. Alex Kuznetsovа в InsertCommand.CommandText идёт какое-то построение для выборки?Потому что делал по примеру. Там инсерт и селект захардкодены: Код: vbnet 1. 2. 3. 4. 5. 6.
Инсерт мне строит билдер, я добавляю селект. В профайлер в результате падает лишь инсерт. Alex KuznetsovЭти две строки (выборки) между собой коррелируют?Если бы вторая выборка происходила, то наверняка. Сейчас они выбирают звездочки. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 15:51 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Antonariy, Тогда содержимое Код: c# 1.
и того что получается в результате вызова Код: c# 1.
в студию... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 20:51 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
pvsSQLString = "select * from tblState where 1=2" Результатом вызова adapter.InsertCommand.CommandText является insert, в таблице появляется новая запись, а вот прилепленный select * from tblState WHERE StateID=SCOPE_IDENTITY(); не выполняется. Этот селект в момент adapter.Update(dc) просто отбрасывается, и если после этого посмотреть adapter.InsertCommand.CommandText, то никакого селекта там уже нет, только инсерт. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2013, 07:57 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2013, 08:52 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Как гляну на эти типизированные датасеты, так сразу появляются рвотные позывы :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2013, 09:34 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Да меня от любых датасетов тошнит, а от этого дизайнера хочется застрелиться. Даже пробовать не буду, у меня же динамика, проще вручную пробежаться по новым строкам и нагенерить чистых SqlCommand, возвращающих insert+select, в обход этого душного адаптера. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2013, 13:04 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
AntonariyДа меня от любых датасетов тошнит, а от этого дизайнера хочется застрелиться. Даже пробовать не буду, у меня же динамика, проще вручную пробежаться по новым строкам и нагенерить чистых SqlCommand, возвращающих insert+select, в обход этого душного адаптера. Ну и как, решил задачу-то? PS. Иногда типизированные датасэты оченна даже шняшные вещи - особлива когда они просты до безобразия и руками программить их лень А так да, проще сразу вызвать SQLCommand и пробежаться ридером по записям... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 08:38 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Alex Kuznetsov А так да, проще сразу вызвать SQLCommand и пробежаться ридером по записям... Проще взять в руки EF и будет щастье. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 09:38 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
МСУAlex Kuznetsov А так да, проще сразу вызвать SQLCommand и пробежаться ридером по записям... Проще взять в руки EF и будет щастье.Ну, так скажем, не всегда будет ЩАСТЬЕ !!! В данном случае да, будет щастье, а в случае, ежели к примеру источник вообще не БД, а вэб сервис - то с EF щастье наступает в извращённой форме... в виде собственного провайдера... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 10:14 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Alex Kuznetsovа в случае, ежели к примеру источник вообще не БД, а вэб сервис - то с EF щастье наступает в извращённой форме... в виде собственного провайдера... Если источник не БД, а веб сервис, то с EF хоть обизвращайся, работать не будет. В этом случае - кодогенерированная прокси служба-класс. Каждой задаче свои инструменты. К чему этот спич? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:10 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Antonariy, А вы уверены что GetFields(mObject) возвращает список полей через запятую? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:58 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
МСУ... Каждой задаче свои инструменты...Абсолютно согласен МСУК чему этот спич? Да вот сейчас с MVC 4 работаю, по условиям задачи данные будут приходить от и обрабатываться сторонним вэб сервисом (не моим ). Думал, как-бы так прикрутить к этому безобразию EF, ну чтоб почти "как по книжке" , ан нет, "как по книжке" с EF в данном случае не сработаешь - токмо через (___o___), т.е. свой провайдер ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 12:12 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Alex KuznetsovAntonariyДа меня от любых датасетов тошнит, а от этого дизайнера хочется застрелиться. Даже пробовать не буду, у меня же динамика, проще вручную пробежаться по новым строкам и нагенерить чистых SqlCommand, возвращающих insert+select, в обход этого душного адаптера. Ну и как, решил задачу-то?Пока нет, случайно удалось вправить мозги adodb. Рекордсет из создающей его процедуры передавался через свойство моего класса, а когда стал возвращать его напрямую, глюки исчезли. Мистика, блеать, причем проявляющаяся только в случае, когда выполняется хранимка, использующая sp_cursoropen + sp_cursorfetch + sp_cursorclose. Процедура возвращает набор записей, и при перемещению по нему рекордсет в рандомный момент либо ВНЕЗАПНО оказывался закрытым либо выдавал access violation при обращении к полю. Причем, если между вызовами MoveNext происходят еще какие-то запросы к базе, глюк практически гарантирован. Я даже пробовал создавать чистенький дубль рекордсета в памяти, чтобы вообще никакой связи с базой, все равно глючило. Cat2А вы уверены что GetFields(mObject) возвращает список полей через запятую?Она возвращала звездочку. А тут обязательно перечисление полей? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 12:45 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Alex KuznetsovДа вот сейчас с MVC 4 работаю, по условиям задачи данные будут приходить от и обрабатываться сторонним вэб сервисом (не моим ). Думал, как-бы так прикрутить к этому безобразию EF, ну чтоб почти "как по книжке" , ан нет, "как по книжке" с EF в данном случае не сработаешь - токмо через (___o___), т.е. свой провайдер Ну так делай свой IDataContext отдельным проектом, через IoC общайся с ним из основного MVC приложения. Всё тоже самое, по сути. Только прокси службу по WSDL тебе сгенерит не EF, а Service Reference генератор. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 12:53 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
МСУAlex Kuznetsovskiped... Ну так делай свой IDataContext отдельным проектом, через IoC общайся с ним из основного MVC приложения. Всё тоже самое, по сути. Только прокси службу по WSDL тебе сгенерит не EF, а Service Reference генератор.Делать свой IDataContext ещё то извращение... Лучше уж свои модели реализующие IEnumerable и скрывающие обращение к вэб сервисам... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 13:14 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
AntonariyА тут обязательно перечисление полей? Необязательно, но если поля бы были без разделения, то именно такая ошибка и была. Текст-то запроса собирает правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 13:24 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Cat2AntonariyА тут обязательно перечисление полей? Необязательно, но если поля бы были без разделения, то именно такая ошибка и была. Текст-то запроса собирает правильно?Инсерт правильно, запись-то вставляется. Вот селект: Код: sql 1.
Не знаю, что тут может быть не правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 13:35 |
|
Identity не возвращается в DataTable
|
|||
---|---|---|---|
#18+
Я бы все же попробовал с 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() ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 13:36 |
|
|
start [/forum/topic.php?fid=20&msg=38474277&tid=1403633]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 313ms |
total: | 460ms |
0 / 0 |