Всем привет, есть следуюший запрос SQL
DECLARE @Test table (ids INT)
SELECT
[AdvertXrefDsp].[advertId],
[Dsp].[dspId],
[Dsp].[name],
[Dsp].[endpoint],
[Dsp].[protocol],
[Dsp].[protocolOptions]
FROM
[AdvertXrefDsp]
INNER JOIN [Dsp] on [AdvertXrefDsp].[dspId] = [Dsp].[dspId]
WHERE
[advertId] in (SELECT * FROM @Test)
И есть код на C# для обращения к этому SQL запросу и соответственно извлечения необходимых данных из БД
private const string SELECT_PARTNERS_PARAM = "SELECT_PARTNERS_PARAM.sql";
private static string GetQuerySelect(string sql_file)
{
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream($"Api.Dal.Query.{sql_file}"))
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
return reader.ReadToEnd();
}
public async Task<IEnumerable<RtbModel>> GetPartnerDal(int[] idsS)
{
var listOfPartners = new List<RtbModel>();
var sqlCommand = GetQuerySelect(SELECT_PARTNERS_PARAM);
DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("ids", typeof(int)));
foreach (var id in idsS)
{
dataTable.Rows.Add(id);
}
var cmd = CreateCommand(sqlCommand);
SqlParameter parameter = cmd.Parameters.AddWithValue("Test", dataTable);
parameter.TypeName = "Test";
using (var reader = await cmd.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
// Код для записи данных из БД
}
}
return listOfPartners;
}
При обращении к этому и методу и передачи например 2ух значений (68 и 65) выкидывает вот такую ошибку
System.Data.SqlClient.SqlException (0x80131904): Column, parameter, or variable @Test. : Cannot find data type Test. Из-за чего может появляться такая ошибка?
P.S.
Если я пишу скрипт в самом SQL Server
DECLARE @Test TABLE (ids INT)
INSERT INTO @Test
VALUES(68),
(65),
SELECT
[AdvertXrefDsp].[advertId],
[Dsp].[dspId],
[Dsp].[name],
[Dsp].[endpoint],
[Dsp].[protocol],
[Dsp].[protocolOptions]
FROM
[AdvertXrefDsp]
INNER JOIN [Dsp] on [AdvertXrefDsp].[dspId] = [Dsp].[dspId]
WHERE
[advertId] in (SELECT * FROM @Test)
то все прекрасно выполняется