zoukankan      html  css  js  c++  java
  • 如何在dapper中获取刚插入行的ID

    二话不说;

    1、先建立个表


    CREATE TABLE [dbo].[UserInfo](
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [UserName] [nchar](10) NULL,
        [UserPass] [nchar](10) NULL,
        [RegTime] [datetime] NULL,
        [Email] [nchar](10) NULL,
    CONSTRAINT [PK_UserInfo] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    2、搭建一个dapper环境  就是引用下 dapper.net 就可以了

    3、

    c#代码

    SqlConnection connection = new SqlConnection( "Data Source=.;Initial Catalog=EFFristModel;uid=sa;password=sql;");
              connection.Open();
              UserInfo userinfo = new UserInfo();
              userinfo.Email = "C#本质论";
              string query = "INSERT INTO UserInfo(Email)VALUES(@Email);SELECT @@identity;UPDATE UserInfo SET Email='xx' WHERE Email=@Email";
              //对对象进行操作

              Response.Write( connection.ExecuteScalar<int>(query, userinfo));

    这样正好可以获取到 @@identity

    注意: 这样写是可以的。但是在高并发的环境中 可能得到的@@identity会不是你想要的结果

    你在新增,别人也可能也在新增 。你获取的时候就是 获取到最后插入的那条记录的ID.

    所以 我们要修改一下

    SELECT @@identity

    修改为

    select @id= SCOPE_IDENTITY();

    这样就保证获取的是正确的ID.

    详情 请查看下SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY返回插入到标识列中的值,但作用域不同 - zc19820620的专栏 - 博客频道 - CSDN.NET

    这样就万事大吉了。

  • 相关阅读:
    深入浅出TCP之listen
    indexing and hashing
    c++四种强制类型转化
    c++实现web服务框架
    MVC、MVP、MVVM概念解析
    常用设计模式
    [React]虚拟DOM
    防抖和节流
    函数柯里化
    apply, bind, call方法剖析
  • 原文地址:https://www.cnblogs.com/jixinyu12345/p/4978066.html
Copyright © 2011-2022 走看看