zoukankan      html  css  js  c++  java
  • 数据库返回新增数据ID

    遇到问题

    在开发中避免不了遇到这样的问题:需要操作刚插入的数据,怎样解决呢?开始的菜鸟可能查询下最新型插入的,
    其实没必要sql server中有个函数SCOPE_IDENTITY()可以返回新插入的主键。

    解决方案一

    通过ExecuteNonQuery加返回参数

    public static int SaveTest(Test newTest)
    {
        var conn = DbConnect.Connection();
        const string sqlString = "INSERT INTO dbo.Tests ( Tester , Premise ) " +
                                 "               VALUES ( @tester , @premise ) " +
                                 "SET @newId = SCOPE_IDENTITY(); ";
        using (conn)
        {
            using (var cmd = new SqlCommand(sqlString, conn))
            {
                cmd.Parameters.AddWithValue("@tester", newTest.tester);
                cmd.Parameters.AddWithValue("@premise", newTest.premise);
                cmd.Parameters.Add("@newId", SqlDbType.Int).Direction = ParameterDirection.Output;
    
                cmd.CommandType = CommandType.Text;
                conn.Open();
                cmd.ExecuteNonQuery();
    
                return (int) cmd.Parameters["@newId"].Value;
            }
        }
    }
    

    更简单的解决方案二

    使用ExecuteScalar。可能感觉使用ExecuteScalar不常规,但是省略了输出参数简单多了,还能正常工作,为什么不呢?

    public static int SaveTest(Test newTest)
    {
        var conn = DbConnect.Connection();
        const string sqlString = "INSERT INTO dbo.Tests ( Tester , Premise ) " +
                                 "               VALUES ( @tester , @premise ) " +
                                 "SELECT SCOPE_IDENTITY()";
        using (conn)
        {
            using (var cmd = new SqlCommand(sqlString, conn))
            {
                cmd.Parameters.AddWithValue("@tester", newTest.tester);
                cmd.Parameters.AddWithValue("@premise", newTest.premise);
    
                cmd.CommandType = CommandType.Text;
                conn.Open();
                return (int) (decimal) cmd.ExecuteScalar();
    
            }
        }
    }
    
  • 相关阅读:
    梦断代码阅读笔记03
    学习进度条十五
    梦断代码阅读笔记02
    构建执法阅读笔记06(总结)
    学习进度条十四
    冲刺Noip2017模拟赛7 解题报告——五十岚芒果酱
    冲刺Noip2017模拟赛6 解题报告——五十岚芒果酱
    HDU 3555:Bomb
    NOIp2012:借教室
    HNOI 2012/codevs 1994:排队
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/7509405.html
Copyright © 2011-2022 走看看