具有两个 in 参数的 clr 存储过程
clr stored procedures with two in parameters
我开始学习clr存储过程了。我已经设法使用一个存储过程完成一项工作。但是当我尝试创建一个带有两个 in 参数的存储过程时,我 运行 得到了奇怪的结果。当我提供这两个参数时,我得到的是所有可用行的总数,而不是应该与参数对匹配的行。
我实际 table 中的两个参数,tblRoute 分别命名为 DepCity 和 ArvCity,数据类型均为 nvarchar50。
我明白当前的复杂性应该在 sql 服务器本身中解决,但这是我对 clr 存储过程的培训练习。
谢谢
这是我的代码:
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();
}
}
您没有在查询本身中使用任何一个参数。 SQL 服务器无法确定在查询中应如何使用提供的参数。您需要向查询添加适当的 WHERE
条件并引用这些参数。
我开始学习clr存储过程了。我已经设法使用一个存储过程完成一项工作。但是当我尝试创建一个带有两个 in 参数的存储过程时,我 运行 得到了奇怪的结果。当我提供这两个参数时,我得到的是所有可用行的总数,而不是应该与参数对匹配的行。
我实际 table 中的两个参数,tblRoute 分别命名为 DepCity 和 ArvCity,数据类型均为 nvarchar50。
我明白当前的复杂性应该在 sql 服务器本身中解决,但这是我对 clr 存储过程的培训练习。
谢谢
这是我的代码:
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();
}
}
您没有在查询本身中使用任何一个参数。 SQL 服务器无法确定在查询中应如何使用提供的参数。您需要向查询添加适当的 WHERE
条件并引用这些参数。