通過程序獲得SQL數(shù)據(jù)庫中的GetKey函數(shù)
下面將為您介紹通過程序獲得SQL Server自增型字段的函數(shù)--GetKey函數(shù)的方法,供您參考,希望對你更好學習SQL中函數(shù)能夠有所幫助。
概述:
通過程序來產(chǎn)生自增型字段,可以避免多用戶操作的讀取臟數(shù)據(jù),操作也很簡便.可以更好的在程序中控制這些關鍵字段的數(shù)值.
關鍵步驟:
1. 創(chuàng)建用于存放需要自增的數(shù)據(jù)表.(systemkey)
SQL Script 如下:
- if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SystemKey]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
- drop table [dbo].[SystemKey]
- GO
- CREATE TABLE [dbo].[SystemKey] (
- [ID] [int] NOT NULL ,
- [KeyName] [nvarchar] (50) NOT NULL ,
- [KeyValue] [int] NOT NULL ,
- [SourceID] [nvarchar] (50) NOT NULL ,
- [LockTime] [datetime] NULL
- ) ON [PRIMARY]
- GO
KeyName:關鍵字的字段名(我們需要的字段名稱,手工添加到這個表中)
KeyValue:對應字段名的值.
SourceID:字段的來源,如果沒有可以填””
LockTime:鎖定的時間,在程序內(nèi)部使用.
2. GetKeys函數(shù)方程,通過調(diào)用GetKeys函數(shù)得到關鍵字的值.
函數(shù)描述如下:
- Imports Microsoft.ApplicationBlocks.Data
- Imports Microsoft.VisualBasic.CompilerServices
- Imports System.Threading
- Imports System.Data.SqlClient
- Public Class ClassTestClass ClassTest
- Public Function GetKeys()Function GetKeys(ByVal KeyName As String, ByVal Source As String, ByVal CNString As String) As Integer
- Dim connection As New SqlConnection(CNString)
- Dim NewNum As Integer
- Dim obj2 As Object
- Dim sFlage As String = "Flag"
- Try
- Dim sql As String
- Dim time As DateTime = DateAndTime.Now.AddSeconds(1)
- connection.Open()
- Do While (StringType.StrCmp(sFlage, "", False) <> 0)
- sql = (("Update [SystemKey] Set [SourceID]='" & Source & "', [LockTime]=GetDate() Where [KeyName]='" & KeyName) & "' AND ((DATEADD(millisecond, 1000, LockTime) <GetDate() ) OR ( SourceID=''))")
- Dim j As Integer = SqlHelper.ExecuteNonQuery(connection, CommandType.Text, sql)
- If (j > 0) Then
- sFlage = ""
- Exit Do
- End If
- sFlage = "Err"
- connection.Close()
- If (DateTime.Compare(time, DateAndTime.Now) < 0) Then
- Return -1
- End If
- Thread.Sleep(10)
- Loop
- sql = "Select KeyValue From [SystemKey] Where [KeyName]='" & KeyName & "' AND SourceID='" & Source & "'"
- Dim OldNum As Object = SqlHelper.ExecuteScalar(connection, CommandType.Text, sql)
- Dim num As Integer = (IntegerType.FromObject(OldNum) + 1)
- sql = "Update [SystemKey] Set [KeyValue]=" & StringType.FromInteger(num) & ", [SourceID]='' Where [KeyName]='" & KeyName & "'"
- SqlHelper.ExecuteNonQuery(connection, CommandType.Text, sql)
- NewNum = num
- Catch exception As Exception
- NewNum = -1
- Finally
- If Not connection Is Nothing Then
- CType(connection, IDisposable).Dispose()
- End If
- End Try
- Return NewNum
- End Function
- End Class
【編輯推薦】