Я использую C # для вызова хранимой процедуры и заполнения ее из таблицы данных, но я делаю что-то не так.
Моя хранимая процедура:
CREATE PROCEDURE [dbo].[getStationInfo]
@stationList AS dbo.udtableStationCode READONLY
AS
BEGIN
SELECT *
FROM stations
WHERE StationCode IN (SELECT * FROM @stationList)
END
В этой процедуре используется определенный пользователем тип таблицы:
CREATE TYPE [dbo].[udtableStationCode]
AS TABLE (StationCode NVARCHAR(50))
Я пытаюсь отправить таблицу данных в хранимую процедуру и вернуть результат в другую таблицу данных. Вот мой C #:
using (SqlConnection con = new SqlConnection(strConn))
{
con.Open();
using (SqlCommand cmd = new SqlCommand("getStationInfo", con))
{
using (SqlDataAdapter ada = new SqlDataAdapter(cmd))
{
using (DataTable dtStationsReturned = new DataTable())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.CommandText = "dbo.getStationInfo";
cmd.Parameters.AddWithValue("@stationList", dtStationCodes);
ada.Fill(dtStationsReturned);
}
}
}
}
Независимо от того, что я пытаюсь, когда мой код попадает в строку 'ada.Fill', я получаю ошибку:
Процедура "getStationInfo" не имеет параметра с именем "@stationList".
Но хранимая процедура getStationInfo
явно имеет этот параметр. Может кто-нибудь сказать мне, что я делаю не так? Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: я проверил содержимое dtStationCodes
, и это нормально.
РЕДАКТИРОВАТЬ: Вот как я создаю мой dtStationCodes
дата:
DataTable dtStationCodes = new DataTable();
dtStationCodes.Columns.Add("StationCode", typeof(String));