Набор данных: как получить значение первичного ключа, возвращаемого функцией SELECT SCOPE_IDENTITY ()? - PullRequest
3 голосов
/ 20 мая 2011

Я использую набор данных.У меня есть табличный адаптер с именем PackageTableAdapter , который содержит метод с именем InsertPackage .

INSERT INTO [dbo].[Packages] ([UserID], [Name]) VALUES (@UserID, @Name)

//Return the PackageID value for the newly created record...
SELECT SCOPE_IDENTITY()

Этот табличный адаптер используется классом среднего уровня, скод ниже:

private PackagesTableAdapter _packagesTableAdapter = null;
protected PackagesTableAdapter Adapter
{
    get
    {
        if (_packagesTableAdapter == null)
            _packagesTableAdapter = new PackagesTableAdapter();

        return _packagesTableAdapter;
    }
}    

public bool AddPackage(string PackageName)
{
    // Create a new PackageRow instance
    Album.PackagesDataTable packages = new AlbumCongo.PackagesDataTable();
    Album.PackagesRow package = packages.NewPackagesRow();

    // Add the new package
    package.Name = PackageName;
    packages.AddPackagesRow(package);
    int rowsAffected = Adapter.Update(packages);       

    // Return true if precisely one row was inserted,
    // otherwise false
    return rowsAffected == 1;        
}

Как перехватить первичный ключ вновь созданного пакета (тот, который должен возвращаться оператором SELECT SCOPE_IDENTITY () )?

EDIT

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

Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Прежде всего вы должны сделать тип возврата метода вставки равным Scaler. Вы также можете сделать это, щелкнув правой кнопкой мыши свойства вашего insert Method properties.

Во-вторых, вы можете получить идентификатор, позвонив по номеру Adapter method следующим образом:

Int32 ID = Convert.ToInt32(Adapter.Insert(parameters...);
1 голос
/ 20 мая 2011

Проверьте PackageID объекта DataRow ПОСЛЕ вызова Adapter.Update.

...