@White_Bambie

Как параметризовать запрос при помощи массива (WHERE field IN (...)?

"SELECT * FROM testimony WHERE Name IN('" + "Запись 1" + "','"+ "Запись 2" +"')" работает. Как сделать, чтобы значения загружались из массива (array)?
Сам массив:
string[] array = new string[] { "Запись 1", "Запись 2" };
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Комментировать
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Создаете в БД тип
CREATE TYPE [dbo].[TableValueType] AS TABLE(
	[value] varchar(50) NOT NULL
)

Затем в коде
var tableParam = new SqlParameter("@paramName", SqlDbType.Structured);
tableParam.TypeName = "[dbo].[TableValueType]";
tableParam.Direction = ParameterDirection.Input;
// Установка значений
var rows = new List<SqlDataRecord>();
var sqlMetaData = new SqlMetaData("value", SqlDbType.VarChar);
foreach (var value in values)
{
      var row = new SqlDataRecord(sqlMetaData);
      row.SetValues(value);
      rows.Add(row);
}
tableParam.Value = rows;

И запрос будет вида
SELECT * FROM testimony WHERE Name IN (select [value] from @paramName)


PS: Упс! Тег оказывается MySql, а это решение для MSSQL
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы