VB.NET下如何利用ExecuteScalar方法及select @@Identity獲得“自動編號”的關鍵字

Command.ExecuteScalar 方法
執行查詢,並返回查詢所返回的結果集中第一行的第一列。忽略其他列或行。使用 ExecuteScalar 方法從數據庫中檢索單個值(例如一個聚合值)。與使用 ExecuteReader 方法,然後使用 oleDataReader 返回的數據執行生成單個值所需的操作相比,此操作需要的代碼較少


SELECT @@IDENTITY方法
取出前一條語句的自動編號的關鍵字(即:必須首先執行一個insert,然後馬上用SELECT   @@IDENTITY;來得到你插入行的id;否則返回的始終是0! )。Access在Jet 4.0 OLEDBProviderfor 支持。

==========================================================================
Access一次只能執行一條SQL。
多條SQL需要多次執行,這是限制。


在SQL Server中,可以一次執行多條SQL語句。
Access使用的是Jet-SQL,SQL Server使用的是T-SQL,兩者用法上相差很大。


但是Access中可以連續執行N條語句,象下面這樣:

        OleCommand.CommandText = "INSERT INTO MyTable (N1,N2) VALUES (22,11)"
        OleCommand.ExecuteNonQuery()
        OleCommand.CommandText = "SELECT @@IDENTITY"
        Dim ID As Integer = OleCommand.ExecuteScalar()

 完整的函數如下: 
 ==========================================================================
    '*
    '*作用:獲得新增記錄的“自動編號”關鍵字
    '*參數:
    '*    ——connectionString :連接字符串
    '*    ——InsertCommandText :插入新記錄的 INSERT 語句
    '*
    Public Function GetIdentity(ByVal connectionString As String, ByVal InsertCommandText As String) As Integer
        Using OleConnection As New OleDbConnection(connectionString)
            Dim OleCommand As New OleDbCommand()
            Try
                OleConnection.Open()
                OleCommand.Connection = OleConnection
                '
                OleCommand.CommandText = InsertCommandText
                OleCommand.ExecuteNonQuery()
                OleCommand.CommandText = "SELECT @@IDENTITY"
                Dim newProdID As Integer = OleCommand.ExecuteScalar()
                'Convert.ToInt32(OleCommand.ExecuteScalar())
                Return newProdID
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                OleConnection.Close()
            End Try
        End Using
    End Function

發佈了20 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章