Parameter von SQL-Anweisungen
Zu Abschnitt 5.3.2 des Buchs
Das folgende Beispiel zeigt die Verwendung von Parameter bei Kommandoobjekten.
Für eine Verbindung zur Datenbank NETBOOK werden mit der Methode NewInsertCommand
Kommandoobjekte für das Einfügen von neuen Zeilen in die Tabelle Contact erzeugt.
Dabei werden die Werte der Felder über Parameter übergeben.
In der Methode Execute werden dann die Parameterwerte den Parametern zugewiesen und das
Kommando ausgeführt.
5-3-2-DbParameterSample.cs
using System;
using System.Data;
using System.Data.SqlClient;
namespace Chapter5
{
public class DbParameterSample
{
static SqlConnection NewConnection()
{
string connStr = "Data Source=localhost\\SQLEXPRESS; " +
"Initial Catalog=NETBOOK; Integrated Security=True";
return new SqlConnection(connStr);
}
static SqlCommand NewInsertCmd()
{
string cmdStr = "INSERT INTO Contact " +
"(FirstName, Name, NickName, EMail, Phone)" +
"VALUES (@FirstName, @Name, @Nick, @EMail, @Phone ); " +
"SELECT @ID = @@IDENTITY"; // @@IDENTITY ist MsSqlServer-spezifisch!
SqlCommand cmd = new SqlCommand(cmdStr);
cmd.Connection = NewConnection();
cmd.CommandType = CommandType.Text;
//----- Namen und SQL-Typen der formalen Eingangsparameter setzen
IDataParameterCollection pars = cmd.Parameters;
pars.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar));
pars.Add(new SqlParameter("@Name", SqlDbType.NVarChar));
pars.Add(new SqlParameter("@Nick", SqlDbType.NVarChar));
pars.Add(new SqlParameter("@EMail", SqlDbType.NVarChar));
pars.Add(new SqlParameter("@Phone", SqlDbType.NVarChar));
//----- Name und SQL-Typ des formalen Ausgangsparameters setzen
SqlParameter idPar = new SqlParameter("@ID", SqlDbType.BigInt);
idPar.Direction = ParameterDirection.Output;
pars.Add(idPar);
return cmd;
}
static void Execute(string firstName, string name, string nickName,
string email, string phone, out long id)
{
SqlCommand cmd = NewInsertCmd();
//----- Aktualparameter setzen
cmd.Parameters["@FirstName"].Value = firstName;
cmd.Parameters["@Name"].Value = name;
cmd.Parameters["@Nick"].Value = nickName;
cmd.Parameters["@EMail"].Value = email;
cmd.Parameters["@Phone"].Value = phone;
//----- neuen Datensatz einfgen
cmd.Connection.Open();
cmd.ExecuteNonQuery(); // fhrt INSERT aus
//----- Ausgangsparameter abfragen
id = (long)cmd.Parameters["@ID"].Value;
cmd.Connection.Close();
}
public static void Main()
{
long id;
try
{
Execute("Dietrich", "Birngruber", "Didi", "didi@dotnet.jku.at", "7133", out id);
Console.WriteLine("neuer Datensatz mit der ID {0} wurde eingefgt", id);
}
catch (Exception e)
{
Console.WriteLine("Datensatz konnte nicht eingefuegt werden - {0}", e);
}
}
}
}
|
Beim Ausführen des Programms wird folgende Ausgabe erzeugt:
|