sql >> データベース >  >> RDS >> Sqlserver

ID値を返すときのExecuteScalarとExecuteNonQuery

    Aaronが提案しているように、ストアドプロシージャを使用すると、SQL ServerのSQLバッチのコンパイル作業が節約されるため、処理が高速になります。ただし、次のいずれかのアプローチを使用することもできます:ExecuteScalar またはExecuteNonQuery 。 IMHO、それらの間のパフォーマンスの違いは非常に小さいので、どちらの方法も同じように「適切」です。

    そうは言っても、ExecuteScalarを使用する意味がわかりません。 出力パラメーターからID値を取得する場合。その場合、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までの2回キャストする必要があることに注意してください。 、次にint (これに注意してくれたtechturtleに感謝します)。




    1. PostgreSQLで昨日の日付を取得する方法

    2. 高速ローカルストレージを求めて

    3. phpを使用したMysqlイベントエラー

    4. SQLiteでテーブルを作成する