powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Identity не возвращается в DataTable
19 сообщений из 44, страница 2 из 2
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
19 сообщений из 44, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Identity не возвращается в DataTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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