数据集:如何捕获 SELECT 返回的主键值 SCOPE_IDENTITY()

本文关键字:SCOPE 键值 IDENTITY 何捕获 SELECT 返回 数据集 | 更新日期: 2023-09-27 17:57:06

我正在使用数据集。我有一个名为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() 语句返回的主键)?

编辑

我想返回一个自定义对象,而不是返回布尔值,该对象包含布尔值和表示新创建行 ID 的 int。

感谢您的帮助。

数据集:如何捕获 SELECT 返回的主键值 SCOPE_IDENTITY()

首先,您必须将插入方法的返回类型设为Scaler 。您也可以通过右键单击insert Method properties的属性来执行此操作。

其次,您可以通过像这样调用Adapter method来获取 ID:

Int32 ID = Convert.ToInt32(Adapter.Insert(parameters...);

在 Adapter.Update 调用之后检查 DataRow 对象上的 PackageID。