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

问题描述

| 我正在使用数据集。我有一个名为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()语句应返回的主键)? 编辑 我不想返回布尔值,而是要返回一个自定义对象,该对象既包含bool值,又包含一个表示新创建行ID的int。 感谢您的帮助。     

解决方法

首先,您必须将insert方法的返回类型设为
Scaler
。您也可以通过右键单击
insert Method properties
的属性来执行此操作。 其次,您可以通过调用
Adapter method
来获取ID,如下所示:
Int32 ID = Convert.ToInt32(Adapter.Insert(parameters...);
    ,在Adapter.Update调用之后,检查DataRow对象上的PackageID。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...