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

    这样就万事大吉了。

  • 相关阅读:
    校验相关问题
    类型转换和操作符重载 (c#)
    泛型委托Func<string,string>()
    第三次作业 刘惠惠
    刘惠惠1.12
    第二次作业刘惠惠2.6,2.15
    刘惠惠1.8
    第四次作业 刘惠惠
    刘惠惠1.2
    设计模式中的单件模式
  • 原文地址:https://www.cnblogs.com/jixinyu12345/p/4978066.html
Copyright © 2011-2022 走看看