通过程序获得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 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

转载于:https://www.cnblogs.com/rippleyong/archive/2005/01/31/99892.html

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

  1. sql server 自增型字段 在有数据的情况下 修改 标识种子

    比如以前 是 从  1 开始  ,现在数据库 有 10000 条记录,已经到了 10000 我现在想从 10000000  开始增长? 如何修改? 用下列语句 DBCC CHECKIDENT(tn_c ...

  2. SQL Server:向 SQL Server 自增字段插入值 (转)

    SQL Server:向 SQL Server 自增字段插入值 [鹏城万里] 发表于 www.sqlstudy.com 通常情况下,不能向 SQL Server 自增字段插入值,如果非要这么干的话,S ...

  3. server sql 中类型为bit应该插入什么值_关于SQL Server中bit类型字段增删查改的一些事...

    前言 本文主要给大家介绍了关于SQL Server中bit类型字段增删查改的一些事,话说BIT类型字段之前,先看"诡异"的一幕,执行Update成功,但是查询出来的结果依然是1,而 ...

  4. SQL Server使用SUM(求和)函数

    使用SUM(求和)函数 SUM函数用于返回表达式中所有值的和.通常情况下,对某些数据进行汇总时会用到该函数. 语法: SUM([ALL | DISTINCT] expression) 参数说明: l  ...

  5. php sql 时间 函数,PHP模拟SQL Server的两个日期处理函数

    PHP模拟SQL Server的两个日期处理函数 2021-01-21 17:04:27149 //在PHP中处理日期非常不方便,比如求两个日期之间相差的月份?该怎么办呢? //文件名:date.in ...

  6. columnproperty server sql_导出SQL Server数据库表中字段的说明/备注

    时 间:2013-02-18 09:09:11 作 者:摘 要:导出SQL Server数据库表中字段的说明/备注 正 文: 打开SQL企业管理器 ,找到你要导出用户表字段信息的那个数据库 ,点击工具 ...

  7. 在SQL SERVER中实现Split功能的函数,并在存储过程中使用

    CREATE FUNCTION dbo.SplitString (@Expression NVARCHAR(4000), --要拆分的字符串          @Delimiter NVARCHAR( ...

  8. SQL Server 将一个表中字段的值复制到另一个表的字段中

    原文:SQL Server 将一个表中字段的值复制到另一个表的字段中 具体方法如下 一:update 表2 set (要插入的列名)= select 表1.某一列 from 表1 left jion ...

  9. SQL Server 中截取字符串常用的函数

    SQL Server 中截取字符串常用的函数:1.LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要截 ...

最新文章

  1. php 与时间有关的函数,php中与时间相关的常用函数有哪些
  2. 使用Installshield制作asp,asp.net应用的安装程序
  3. 计算机主板等级指标,转载一篇主板文章,教你认识三大厂主板分级
  4. iOS开发:iPhone6、6 plus适配
  5. c++11-type_traits类型萃取
  6. 产品认识:一个可直接套用的产品分析框架(纯干货)
  7. 应广单片机adc_应广PMC232系列单片机 12位ADC PWM LCD 双核心8位MCU
  8. 一个java程序_从另一个java程序运行java程序
  9. windows下编辑的shell复制到linux无法执行
  10. 如何通过eclipse查看、阅读hadoop2.4源码
  11. c语言timer linux 回调函数_SetTimer 与 回调函数
  12. Windows系统开机自动运行程序和自动启动服务
  13. 超详细的SpringBoot学习笔记-动力节点王鹤
  14. spring-xxx-xxx-0.0.1-SNAPSHOT.jar中没有主清单属性
  15. 怎么用手机记笔记?安卓手机超实用的笔记app
  16. Golang-channel实现
  17. Day【10】相交链表
  18. 5G三大应用场景: eMBB、uRLLC和mMTC
  19. [BUUCTF-pwn] wdb_2018_1st_EasyCoin
  20. 一个十几年前做的老游戏--隋唐演义

热门文章

  1. Linux下为文件增加列的shell脚本
  2. linux下根据进程号PID查找程序路径
  3. 图像处理库OpenCV参考网址
  4. Leetcode 203. 移除链表元素 解题思路及C++实现
  5. SpringMVC入门案例
  6. 移动端也能兼容的web页面制作2:导航栏、背景图片设置
  7. Nginx 负载均衡 - linux下nginx加载配置文件异常处理,提示invalid PID number in “/run/nginx.pid“问题解决
  8. Java 技术篇 - 前端浏览器发送一次url请求后端ServerSocket接收到两次请求原因及解决方法,GET /favicon.ico HTTP/1.1问题处理
  9. MySQL 数据库show processlist where条件筛选报错解决方法,[Code: 1064, SQL State: 42000] You have an error in your
  10. 第八周实践项目7 对称矩阵的压缩存储及基本运算