Возможный получить значение столбца ИДЕНТИФИКАЦИОННЫХ ДАННЫХ на использовании вставки SqlCommandBuilder (не используя Сохраненный Proc)?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

14
задан Dan F 7 March 2011 в 01:38
поделиться

6 ответов

Команда вставки может быть проинструктирована для обновления вставленной записи с помощью или выходных параметров или первой возвращенной записи (или оба) использование свойства UpdatedRowSource...

InsertCommand.UpdatedRowSource = UpdateRowSource.Both;

, Если бы Вы хотели использовать хранимую процедуру, Вы были бы сделаны. Но Вы хотите использовать необработанную команду (иначе вывод разработчика команды), который не допускает ни один a) выходные параметры или b) возврат записи. Почему это? Хорошо для a) это - то, на что будет похож Ваш InsertCommand...

INSERT INTO [SomeTable] ([Name]) VALUES (@Name)

нет никакого способа ввести выходной параметр в команду. Таким образом что относительно b)? К сожалению, DataAdapter выполняет команду Insert путем называния команд методом ExecuteNonQuery. Это не возвращает записей, таким образом, нет никакого пути к адаптеру для обновления вставленной записи.

, Таким образом, необходимо или использовать сохраненный proc или разочароваться в использовании DataAdapter.

4
ответ дан 1 December 2019 в 10:05
поделиться

Если те другие методы не работали на Вас, .NET, обеспеченный инструменты (SqlDataAdapter) и т.д. еще, действительно не предлагают много относительно гибкости. Обычно необходимо брать его к следующему уровню и начинать делать материал вручную. Хранимая процедура была бы одним способом продолжать использовать SqlDataAdapter. Иначе необходимо переместиться в другой инструмент доступа к данным, поскольку библиотеки данных .NET имеют пределы, так как они разрабатывают, чтобы быть простыми. Если Ваша модель не работает с их видением, Вы имеете к коду самокрутки в некоторой точке/уровне.

1
ответ дан 1 December 2019 в 10:05
поделиться

Вы изучили использование LINQ вместо этого? Я понимаю, что это не обращается к Вашему фактическому вопросу, но если Вы используете.NET 3.5, действительно необходимо попытаться использовать LINQ. На самом деле, с появлением Кода Первый EntityFramework, я думаю, что Вы могли легко выбрать LINQ to SQL или EF как относительно легкие альтернативы прокрутке Вашего собственного DAL.

-1
ответ дан 1 December 2019 в 10:05
поделиться

Вообще-то, это работает на меня :

SqlDataAdapter.InsertCommand.CommandText += "; SELECT MyTableID = SCOPE_IDENTITY()" InsertCommand.UpdatedRowSource = UpdateRowSource.OutputParameters;

Ваше здоровье.

2
ответ дан 1 December 2019 в 10:05
поделиться

У меня была такая же проблема. Это было решено, когда я клонировал команду, сгенерированную конструктором команд. Похоже, что даже когда вы меняете commandText в insertcommand, он продолжает получать команду, сгенерированную Commandbuilder ... Вот код, который я использовал для клонирования команды ...

        private static void CloneBuilderCommand(System.Data.Common.DbCommand toClone,System.Data.Common.DbCommand repository)
    {
        repository.CommandText = toClone.CommandText;
        //Copying parameters
        if (toClone.Parameters.Count == 0) return;//No parameters to clone? go away!
        System.Data.Common.DbParameter[] parametersArray= new System.Data.Common.DbParameter[toClone.Parameters.Count];
        toClone.Parameters.CopyTo(parametersArray, 0);
        toClone.Parameters.Clear();//Removing association before link to the repository one
        repository.Parameters.AddRange(parametersArray);            
    }
2
ответ дан 1 December 2019 в 10:05
поделиться

Что мне подходит, так это настройка MissingSchemaAction:

SqlCommandBuilder commandBuilder = new SqlCommandBuilder(myDataAdapter);
myDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

Это позволяет мне получить первичный ключ (если он является идентификатором или автономером) после вставки.

Удачи.

4
ответ дан 1 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: