Für größere Programme ist SQL SERVER meist die erste Wahl. Nur wer sehr sparsam ist, nutzt ACCESS. Um die Datenbank effizienter zu machen, werden bei der Verwendung von SQL SERVER im Allgemeinen gespeicherte Prozeduren verwendet, da gespeicherte Prozeduren schnell ausgeführt werden und einige erweiterte Abfrage- und andere Funktionen implementieren können. Beispielsweise werden einige Datenparameter übergeben, die ausgeführten SQL-Prozeduren können jedoch unterschiedlich sein.
Hier ist ein Beispiel für die Erstellung einer neuen Rolle und die Anforderung, dass der Name der Rolle nicht wiederholt werden darf. Das Folgende ist eine gespeicherte Prozedur.
CREATE PROCEDURE sp_AccountRole_Create@CategoryID int,
@RoleName nvarchar(10),
@Description nvarchar(50),
@RoleID int-Ausgabe
ALS
DECLARE @Count int– Finden Sie heraus, ob Datensätze mit demselben Namen vorhanden sind
SELECT @Count = Count(RoleID) FROM Account_Role WHERE
Rollenname = @RollennameWENN @Count = 0
IN Account_Role EINFÜGEN
(Kategorie-ID, Rollenname, Beschreibung) Werte
(@CategoryID, @RoleName, @Description)SET @RoleID = @@IDENTITY
RÜCKKEHR 1
GEHEN
SqlConnection DbConnection = new SqlConnection(mConnectionString);
SqlCommand command = new SqlCommand( "sp_AccountRole_Create", DbConnection );
DbConnection.Open(connectString);
// Setze das SqlCommand-Attribut auf eine gespeicherte Prozedur
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);
//Rückgabewert
command.Parameters.Add("Returnvalue",
SqlDbType.Int,
4, // Größe
ParameterDirection.Returnvalue,
false, // ist nullbar
0, // Byte-Präzision
0, // Byteskala
string.Empty,
DataRowVersion.Default,
null );command.parameters["@CategoryID"].value = Erlaubnis.CategoryID;
command.parameters["@RoleName"].value = Erlaubnis.PermissionName;
command.parameters["@Description"].value = Erlaubnis.Description;
// Neuer ID-Wert kann zurückgegeben werden
command.parameters["@RoleID"].Direction = ParameterDirection.Output;int rowsAffected = command.ExecuteNonQuery();
int result = command.parameters["Returnvalue"].value;
int newID = command.parameters["@RoleID"].value;
Die Funktion ist recht leistungsstark. Sie können drei Werte abrufen, nämlich den Zeilenauswirkungswert, den Rückgabewert der gespeicherten Prozedur und den neuen ID-Wert.