Ich habe begonnen, CLR gespeicherte Prozeduren zu lernen. Ich habe es geschafft, mit einer einzigen gespeicherten Prozedur zu arbeiten. Aber wenn ich versuche, eine gespeicherte Prozedur mit zwei Parametern zu erstellen, bekomme ich seltsame Ergebnisse. Wenn ich die zwei Parameter zur Verfügung stelle, bekomme ich die Summe aller verfügbaren Zeilen und nicht die Zeilen, die mit dem Parameterpaar übereinstimmen sollen.clr gespeicherte Prozeduren mit zwei in Parametern
Die beiden Parameter in meiner tatsächlichen Tabelle, tblRoute, heißen DepCity und ArvCity, beide mit dem Datentyp nvarchar50.
Ich verstehe, dass diese aktuelle Komplexität sollte eher in SQL Server selbst gelöst werden, aber dies ist eine Übung für die Übung von mir gespeicherte Prozesse.
Dank
Hier ist mein Code:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void RouteSqlStoredProcedure(SqlString strDepCity, SqlString strArvCity)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Context Connection=true";
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
conn.Open();
cmd.CommandText = "SELECT tblAirline.AirlineName, tblAircraft.Manufacturer, tblAircraft.AircraftModel, tblAircraft.AircraftUnits, tblAircraft.SeatCapacity, tblAircraft.TotalCapacity, tblRoute.FlightNr, tblRoute.DepCity, tblRoute.ArvCity FROM tblAircraft INNER JOIN tblAircraftRoute ON tblAircraft.AircraftID = tblAircraftRoute.AircraftID INNER JOIN tblAirline ON tblAircraft.AirlineID = tblAirline.AirlineID INNER JOIN tblRoute ON tblAircraftRoute.RouteID = tblRoute.RouteID";
SqlParameter paramDep = new SqlParameter("@strDepCity", SqlDbType.NVarChar, 50);
paramDep.Direction = ParameterDirection.Input; // optional as it is the default
paramDep.Value = strDepCity.Value;
cmd.Parameters.Add(paramDep);
SqlParameter paramArr = new SqlParameter("@strArvCity", SqlDbType.NVarChar, 50);
paramArr.Direction = ParameterDirection.Input; // optional as it is the default
paramArr.Value = strArvCity.Value;
cmd.Parameters.Add(paramArr);
SqlDataReader sqldr = cmd.ExecuteReader();
SqlContext.Pipe.Send(sqldr);
sqldr.Close();
conn.Close();
}
}
Dumm mir, aber natürlich :) – user2371684