【问题标题】:Dataset: How to capture the primary key value returned by SELECT SCOPE_IDENTITY()?数据集:如何捕获 SELECT SCOPE_IDENTITY() 返回的主键值?
【发布时间】:2011-08-29 06:10:49
【问题描述】:

我正在使用数据集。我有一个名为 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 值,该对象既包含 bool 值,又包含一个表示新创建行的 ID 的 int。

感谢您的帮助。

【问题讨论】:

  • 如果您使用数据适配器,您可以查看:msdn.microsoft.com/en-us/library/ks9f57t0.aspx。不过,您可能不得不争论自己的自定义对象。
  • 在代码中,有一种方法可以告诉您有多少行受到影响。有没有一种简单的方法可以检索新创建的 ID?

标签: c# asp.net dataset tableadapter


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多