Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

ExecuteScalar срещу ExecuteNonQuery при връщане на стойност на идентичност

Както беше предложено от Аарон, съхранената процедура би я направила по-бърза, защото спестява на Sql Server работата по компилирането на вашата SQL партида. Все пак можете да използвате всеки от двата подхода:ExecuteScalar или ExecuteNonQuery . IMHO, разликата в производителността между тях е толкова малка, че всеки метод е също толкова "правилен".

След като казах това, не виждам смисъл да използвам ExecuteScalar ако грабвате стойността на идентичността от изходен параметър. В този случай стойността, върната от 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();

        }
    }
}

Приятно програмиране!

РЕДАКТИРАНЕ :Имайте предвид, че трябва да прехвърляме два пъти:от обект към decimal , а след това към int (благодаря на techturtle, че отбеляза това).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как се отваря SDF файл (SQL Server Compact Edition)?

  2. T-SQL - Псевдоним с помощта на =срещу as

  3. Има ли функция Max в SQL Server, която приема две стойности като Math.Max ​​в .NET?

  4. Как да премахнете водещи и последващи знаци в SQL Server

  5. SQL Server 2016:Създайте връзка