使用ADO.NET搭配SqlParameter的Output參數取得最後一筆識別項
當我們新增資料到一個包含自動加號的欄位的Table時,如何在前端使用ADO.NET取得最後一筆識別項,必須進行下列兩個步驟:
- 在SQL命令中使用IDENT_CURRENT、SCOPE_IDENTITY 或 @@IDENTITY取得最後一筆識別值。
- 使用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 差異對照表
延伸閱讀: