Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

ExecuteScalar so với ExecuteNonQuery khi trả về giá trị nhận dạng

Theo đề xuất của Aaron, một thủ tục được lưu trữ sẽ làm cho nó nhanh hơn vì nó tiết kiệm cho Sql Server công việc biên dịch lô SQL của bạn. Tuy nhiên, bạn vẫn có thể sử dụng một trong hai cách tiếp cận:ExecuteScalar hoặc ExecuteNonQuery . IMHO, sự khác biệt về hiệu suất giữa chúng rất nhỏ, nên cả hai phương pháp đều là "thích hợp".

Đã nói rằng, tôi không hiểu việc sử dụng ExecuteScalar nếu bạn đang lấy giá trị nhận dạng từ một tham số đầu ra. Trong trường hợp đó, giá trị được trả về bởi ExecuteScalar trở nên vô dụng.

Một cách tiếp cận mà tôi thích vì nó yêu cầu ít mã hơn, sử dụng ExecuteScalar không có tham số đầu ra:

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

        }
    }
}

Chúc bạn lập trình vui vẻ!

CHỈNH SỬA :Lưu ý rằng chúng ta cần truyền hai lần:từ đối tượng sang decimal , rồi đến int (cảm ơn techturtle đã lưu ý điều này).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng số thực hoặc số thập phân cho ứng dụng kế toán số tiền?

  2. Làm cách nào để hiển thị cấu trúc bảng trong truy vấn SQL Server?

  3. Hàm LEN không bao gồm dấu cách ở cuối trong SQL Server

  4. Làm cách nào để đổi tên thứ gì đó trong SQL Server có dấu ngoặc vuông trong tên?

  5. Định dạng SQL trong SQL Server Management Studio