ASP.NET新增數據返回自增ID


一、情景引入

  項目需求:對於一個數據表(表A)的增、刪、改全部要有日志記錄,日志表(表B)結構 中需要記錄表A的自增ID,這樣才能將日志與操作的數據一一對應起來。

  對於刪和改都好辦,獲取Model時都可以取到這個自增ID,然后就可以存入日志表,但是如果新增一條數據,應該如何獲取到這個自增ID呢?不知道我有沒有表達清楚,下面直接貼具體代碼吧:

二、項目代碼

  
1 string sql="";//這里寫你的具體的新增語句INSERT.......
2 strSql.Append(sql);
3 strSql.Append("SELECT id  FROM [userblack] WHERE @@ROWCOUNT>0 AND id=SCOPE_IDENTITY();");//返回對應的自增ID
View Code

  其實這里還有一個簡便寫法:

  
1 strSql.Append("SELECT SCOPE_IDENTITY() AS id");//將上面代碼的最后的一行替換成這個
View Code

  第一種寫法應該是更嚴謹的,但是兩種寫法都是沒問題的。

  SQL語句寫好之后,接下來就是ASP.NET運行SQL了:

  
 1         public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
 2         {
 3             SqlCommand cmd = new SqlCommand();
 4 
 5             using (SqlConnection connection = new SqlConnection(connectionString))
 6             {
 7                 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
 8                 object val = cmd.ExecuteScalar();
 9                 cmd.Parameters.Clear();
10                 return val;
11             }
12         }
ExecuteScalar

  這里用ExecuteScalar命令,原因如下:

  最后用Convert.ToInt32()將上述方法的返回值轉成Int型就行了。

三、原理分析

  大致說一下具體的原理,SCOPE_IDENTITY()是SQL SERVER的一個內置方法,他會返回當前你的表結構中那個自增列的最后一個值。這樣當你新增一條數據之后附加上SCOPE_IDENTITY()這個方法並SELECT一下就獲取到最后一個自增列的數字了。當然,如果沒有新增數據,但是用SELECT SCOPE_IDENTITY()就會返回NULL。

 

四、總結

  好記性不如爛筆頭!如有疑問,可以留言交流。

 

注意:SQL語句都要以英文的分號結尾,切記!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM