ExecuteScalar vs ExecuteNonQuery podczas zwracania wartości tożsamości

Próbuję dowiedzieć się, czy najlepiej użyćExecuteScalar lubExecuteNonQuery jeśli chcę zwrócić kolumnę tożsamości nowo wstawionego wiersza. przeczytałemto pytanie i rozumiem różnice, ale patrząc na jakiś kod, który napisałem kilka tygodni temu (podczas gdy mocno pożyczałem z tej strony), odkryłem, że w moich wkładkach używałemExecuteScalar, tak:

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

            return (int) cmd.Parameters["@newId"].Value;
        }
    }
}

To działa dobrze dla tego, czego potrzebuję, więc zastanawiam się

Czy powinienem używaćExecuteNonQuery tutaj, ponieważ jest „bardziej odpowiedni” do robienia wkładek?Czy pobieranie wartości tożsamości będzie takie samo, ponieważ używam parametru wyjściowego?Czy są jakieś trafienia wydajności związane z jednym lub drugim sposobem?Czy ogólnie jest lepszy sposób na zrobienie tego ogólnie?

Korzystam z Visual Studio 2010, .NET 4.0 i SQL Server 2008r2, na wypadek, gdyby to miało jakieś znaczenie.

questionAnswers(1)

yourAnswerToTheQuestion