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に感謝します)。