ExecuteScalar против ExecuteNonQuery при возврате значения идентификатора

Попытка выяснить, если этолучше всего использоватьExecuteScalar или жеExecuteNonQuery если я хочу вернуть идентификационный столбец недавно вставленной строки. я прочиталэтот вопрос и я понимаю различия там, но просматривая некоторый код, который я написал несколько недель назад (в то время как сильно заимствуя с этого сайта), я обнаружил, что в своих вставках я использовалExecuteScalar, вот так:

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;
        }
    }
}

Это прекрасно работает для того, что мне нужно, поэтому ямне интересно

Должен ли я использоватьExecuteNonQuery здесь, потому что этоправильнее делать вставки?Будет ли получение значения идентичности в любом случае, так как яиспользуя выходной параметр?Есть ли какие-либо проблемы производительности, связанные с тем или иным способом?Есть ли вообще лучший способ сделать это в целом?

используя Visual Studio 2010, .NET 4.0 и SQL Server 2008r2, на случай, если это что-то изменит.

Ответы на вопрос(1)

Ваш ответ на вопрос