通过程序获得SQL Server自增型字段的函数:GetKey

通过程序获得SQL Server自增型字段的函数:GetKey

 

概述:

通过程序来产生自增型字段,可以避免多用户操作的读取脏数据,操作也很简便.可以更好的在程序中控制这些关键字段的数值.

 

关键步骤:

1.     创建用于存放需要自增的数据表.(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:锁定的时间,在程序内部使用.

 

2.    GetKeys方程,通过调用GetKeys得到关键字的值.

函数描述如下:

Imports  Microsoft.ApplicationBlocks.Data
Imports  Microsoft.VisualBasic.CompilerServices
Imports  System.Threading
Imports  System.Data.SqlClient
Public   Class ClassTest Class ClassTest
    
Public Function GetKeys()Function GetKeys(ByVal KeyName As StringByVal Source As StringByVal CNString As StringAs 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) ")
                
Dim j As Integer = SqlHelper.ExecuteNonQuery(connection, CommandType.Text, sql)
                
If (j > 0Then
                    sFlage 
= ""
                    Exit Do
                
End If
                sFlage 
= "Err"
                connection.Close()
                
If (DateTime.Compare(time, DateAndTime.Now) < 0Then
                    
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

你可能感兴趣的:(通过程序获得SQL Server自增型字段的函数:GetKey)