使用ADO.NET搭配SqlParameter的Output參數取得最後一筆識別項

使用ADO.NET搭配SqlParameter的Output參數取得最後一筆識別項

當我們新增資料到一個包含自動加號的欄位的Table時,如何在前端使用ADO.NET取得最後一筆識別項,必須進行下列兩個步驟:

  1. 在SQL命令中使用IDENT_CURRENT、SCOPE_IDENTITY 或 @@IDENTITY取得最後一筆識別值。
  2. 使用SqlParameter.Direction= System.Data.ParameterDirection.Output將【1】的結果存放至SqlParameter。

 

首先,先建立一個測試資料表【t1】。

		CREATE TABLE t1
		(
		C1    int identity
		,C2    char(1)
		)

接著撰寫下列程式碼片段。

		//建立連線字串
		SqlConnectionStringBuilder conbuilder = new SqlConnectionStringBuilder();
		conbuilder.DataSource = ".";
		conbuilder.InitialCatalog = "test";
		conbuilder.PersistSecurityInfo = true;
		conbuilder.IntegratedSecurity = true;
		using (SqlConnection con = new SqlConnection(conbuilder.ConnectionString))
		{
		using (SqlCommand cmd = new SqlCommand())
		{
		cmd.Connection = con;
		//使用SCOPE_IDENTITY方法取得最後一個識別值
		cmd.CommandText = "insert into t1 values('1'); set @c1= SCOPE_IDENTITY();";
		#region 建立Output參數
		SqlParameter c1 = new SqlParameter();
		c1.ParameterName = "@c1";
		c1.SqlDbType = System.Data.SqlDbType.Int;
		c1.Direction = System.Data.ParameterDirection.Output;
		cmd.Parameters.Add(c1);
		#endregion
		 
		if (con.State != System.Data.ConnectionState.Open) con.Open();
		cmd.ExecuteNonQuery();
		//取得最後一個識別值
		Response.Write(c1.Value);
		}
		}

參考資料:

IDENT_CURRENT、SCOPE_IDENTITY、@@IDENTITY 差異對照表

延伸閱讀:

利用 ADO.NET 接收 SQL Server 預存程序的輸出資料