Метод TableAdapter сбрасывает в NonQuery из скалярного - PullRequest
1 голос
/ 19 июня 2009

Я использую файл .xsd в своем решении Visual Studio 2008 Pro, и у меня возникла проблема со свойством ExecuteMode сброса методов адаптера таблицы. Я создал несколько методов вставки в нескольких адаптерах. Я использую «SELECT SCOPE_IDENTITY ()» после вставки SQL, чтобы вернуть идентификатор новой записи. Затем я обновляю свойство ExecuteMode до Scalar (из NonQuery). Время от времени я замечаю, что ExecuteMode меняется обратно на NonQuery. Я не могу понять, почему. Я не заметил шаблон во время моей работы, который приводит к изменениям. У кого-нибудь из вас есть фанаты .Net, есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2013

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

0 голосов
/ 25 сентября 2009

Вы должны использовать SQL, который вставляет значения и выбирает новую запись вместо SQL, возвращающего скалярное значение, чтобы получить идентификатор.

«Мастер настройки TableAdapter» создаст этот тип SQL, если вы выберете «Создать новую процедуру хранения» на шаге «Выберите тип команды», а затем на «Введите инструкцию SQL для шага Выбрать процедуру хранения» выберите «Дополнительные параметры "mark" Generate Insert, Update ... "и" Refresh the data table ". Заполните остальную часть мастера названиями процедур новостей.

Сгенерированный SQL выглядит примерно так

INSERT INTO [apptbl] ([Id]) VALUES (@Id); 
SELECT Id FROM apptbl WHERE (Id = SCOPE_IDENTITY())

с помощью TableAdapter ...

    public int insert_newObj()
    {
            objDataTable dt = new objDataTable();
            objRow dr = dt.NewObjRow();        

            // assign values to others fields, except the id...

            dt.AddObjRow(dr);

            Adapter.Update(dt);

            return dr.Id;
    }

Обратите внимание, что объект datarow будет заполнен "Адаптером" новым идентификатором из-за второго оператора SQL (SELECT ...) в процедуре сохранения.

Ну, я не уверен, что это могло бы помочь, потому что я не видел ваш SQL, но это очень распространенный способ получения идентификатора.

...