大規模なプログラムの場合は、通常、SQL SERVER が最適です。ACCESS を使用するのは、非常に経済的である場合のみです。 SQL SERVER を使用する場合、データベースの効率を高めるために、ストアド プロシージャが一般に使用されます。ストアド プロシージャは高速に実行され、高度なクエリやその他の機能を実装できるためです。たとえば、一部のデータ パラメーターが渡されますが、実行される SQL プロシージャは異なる場合があります。
新しいロールを作成し、ロール名を重複できないようにする例を次に示します。以下はストアド プロシージャです。
作成プロシージャ sp_AccountRole_Create@CategoryID int、
@RoleName nvarchar(10),
@説明 nvarchar(50)、
@RoleID int 出力
として
@Count int を宣言-- 同じ名前のレコードがあるかどうかを検索します。
SELECT @Count = Count(RoleID) FROM Account_Role WHERE
役割名 = @RoleNameIF @カウント = 0
アカウント_ロールに挿入
(カテゴリID、ロール名、説明) valueS
(@CategoryID、@RoleName、@Description)SET @RoleID = @@IDENTITY
リターン1
行く
SqlConnection DbConnection = new SqlConnection(mConnectionString);
SqlCommand コマンド = new SqlCommand( "sp_AccountRole_Create", DbConnection );
DbConnection.Open(connectString);
// SqlCommand 属性をストアド プロシージャに設定します
command.CommandType = CommandType.StoredProcedure;command.Parameters.Add("@CategoryID", SqlDbType.Int, 4);
command.Parameters.Add("@RoleName", SqlDbType.NVarChar, 10);
command.Parameters.Add("@Description", SqlDbType.NVarChar, 50);
command.Parameters.Add("@RoleID", SqlDbType.Int, 4);
//戻り値
command.Parameters.Add("戻り値",
SqlDbType.Int、
4, // サイズ
パラメータ方向.戻り値、
false、// null 可能です
0, // バイト精度
0, // バイトスケール
文字列.空、
DataRowVersion.Default、
null );command.parameters["@CategoryID"].value = 許可.CategoryID;
command.parameters["@RoleName"].value = 許可.PermissionName;
command.parameters["@Description"].value = 許可.説明;
// 新しい ID 値を返すことができます
command.parameters["@RoleID"].Direction = ParameterDirection.Output;int rowsAffected = command.ExecuteNonQuery();
int result = command.parameters["戻り値"].value;
int newID = command.parameters["@RoleID"].value;
この関数は非常に強力で、行の影響値、ストアド プロシージャの戻り値、新しい ID 値の 3 つの値を取得できます。