Home   Cover Cover Cover Cover
 

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:

output