Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

ExecuteScalar vs ExecuteNonQuery saat mengembalikan nilai identitas

Seperti yang disarankan oleh Aaron, prosedur tersimpan akan membuatnya lebih cepat karena menghemat Sql Server pekerjaan kompilasi kumpulan SQL Anda. Namun, Anda masih bisa menggunakan salah satu pendekatan:ExecuteScalar atau ExecuteNonQuery . IMHO, perbedaan kinerja di antara mereka sangat kecil, sehingga kedua metode itu sama "tepatnya".

Karena itu, saya tidak melihat gunanya menggunakan ExecuteScalar jika Anda mengambil nilai identitas dari parameter keluaran. Dalam hal ini, nilai yang dikembalikan oleh ExecuteScalar menjadi tidak berguna.

Pendekatan yang saya suka karena membutuhkan lebih sedikit kode, menggunakan ExecuteScalar tanpa parameter keluaran:

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();

        }
    }
}

Selamat membuat program!

EDIT :Perhatikan bahwa kita perlu melakukan cast dua kali:dari objek ke decimal , lalu ke int (terima kasih kepada techturtle untuk mencatat ini).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Edit Baris / Catatan Tabel di SQL Server Management Studio ( SSMS) - Tutorial SQL Server / Tutorial TSQL Bagian 18

  2. Perbedaan Antara sys.sql_modules, sys.system_sql_modules, &sys.all_sql_modules di SQL Server

  3. Bagaimana cara saya terhubung ke database SQL Server 2008 menggunakan JDBC?

  4. cara menetapkan nilai cte ke variabel

  5. Menyimpan gambar di SQL Server?