2016-04-08 17 views
0

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(); 
} 
} 

Antwort

0

Sie sind nicht eine der beiden Parameter in der Abfrage selbst verwenden. SQL Server kann nicht bestimmen, wie die angegebenen Parameter in einer Abfrage verwendet werden sollen. Sie müssen der Abfrage die richtige WHERE-Bedingung hinzufügen und auf diese Parameter verweisen.

+0

Dumm mir, aber natürlich :) – user2371684