在插入行之后获取主键或任何其他属性

时间:2013-10-31 09:52:39

标签: asp.net sql-server insert

我有一个包含主键,两个外键和其他属性的表。我想以插入后的方式插入一行,它应该返回PRIMARY KEY,我使用以下语句来执行查询

int MyId = (int)insert.ExecuteScalar();  

但上面的代码返回一个外键,这是插入查询的一部分。如何在插入后获得主键?第二,有没有办法在插入后获得任何特定属性 我正在使用asp.net和Sql Server 2008

2 个答案:

答案 0 :(得分:2)

在SQL Server中使用这样的表:

create table test
(
 id int identity primary key,
 data nvarchar(255)
)

您可以使用SCOPE_IDENTITY() :(错误检查遗漏等)

using System;
using System.Data;
using System.Data.SqlClient;

namespace sqltest
{
  class Program
  {
      static void Main(string[] args)
      {
        SqlParameter id = new SqlParameter("id",0);
        //parameter value can be set server side and will be returned to client
        id.Direction=ParameterDirection.Output; 
        string query="Insert into test values ('hello world');select @id=SCOPE_IDENTITY()";
        int lastID=0;
        using (SqlConnection conn = new SqlConnection("put your connection string here"))
        {
            conn.Open();
            using (SqlCommand comm = new SqlCommand(query, conn))
            {
                comm.Parameters.Add(id);
                comm.ExecuteNonQuery();
                //id.Value now holds the last identity value
                lastID = Convert.ToInt32(id.Value);
            }//end using comm
        }//end using conn
       }//end Main
    }
}

但老实说,如果可能的话,我会建议您使用抽象(Linq2SQL,实体框架,NHibernate等等)来处理这类事情,因为它让您无需处理这种样板。

答案 1 :(得分:0)

使用输出!!

create table mytab(
      pk int identity primary key,
      data nvarchar(20)
    );
    go

    insert into mytab
    output inserted.pk
    values ('new item my PK');
    go