В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Команда вставки может быть проинструктирована для обновления вставленной записи с помощью или выходных параметров или первой возвращенной записи (или оба) использование свойства UpdatedRowSource...
InsertCommand.UpdatedRowSource = UpdateRowSource.Both;
, Если бы Вы хотели использовать хранимую процедуру, Вы были бы сделаны. Но Вы хотите использовать необработанную команду (иначе вывод разработчика команды), который не допускает ни один a) выходные параметры или b) возврат записи. Почему это? Хорошо для a) это - то, на что будет похож Ваш InsertCommand...
INSERT INTO [SomeTable] ([Name]) VALUES (@Name)
нет никакого способа ввести выходной параметр в команду. Таким образом что относительно b)? К сожалению, DataAdapter выполняет команду Insert путем называния команд методом ExecuteNonQuery. Это не возвращает записей, таким образом, нет никакого пути к адаптеру для обновления вставленной записи.
, Таким образом, необходимо или использовать сохраненный proc или разочароваться в использовании DataAdapter.
Если те другие методы не работали на Вас, .NET, обеспеченный инструменты (SqlDataAdapter) и т.д. еще, действительно не предлагают много относительно гибкости. Обычно необходимо брать его к следующему уровню и начинать делать материал вручную. Хранимая процедура была бы одним способом продолжать использовать SqlDataAdapter. Иначе необходимо переместиться в другой инструмент доступа к данным, поскольку библиотеки данных .NET имеют пределы, так как они разрабатывают, чтобы быть простыми. Если Ваша модель не работает с их видением, Вы имеете к коду самокрутки в некоторой точке/уровне.
Вы изучили использование LINQ вместо этого? Я понимаю, что это не обращается к Вашему фактическому вопросу, но если Вы используете.NET 3.5, действительно необходимо попытаться использовать LINQ. На самом деле, с появлением Кода Первый EntityFramework, я думаю, что Вы могли легко выбрать LINQ to SQL или EF как относительно легкие альтернативы прокрутке Вашего собственного DAL.
Вообще-то, это работает на меня :
SqlDataAdapter.InsertCommand.CommandText += "; SELECT MyTableID = SCOPE_IDENTITY()" InsertCommand.UpdatedRowSource = UpdateRowSource.OutputParameters;
Ваше здоровье.
У меня была такая же проблема. Это было решено, когда я клонировал команду, сгенерированную конструктором команд. Похоже, что даже когда вы меняете 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);
}
Что мне подходит, так это настройка MissingSchemaAction:
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(myDataAdapter);
myDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
Это позволяет мне получить первичный ключ (если он является идентификатором или автономером) после вставки.
Удачи.