ahmed_sa Ответов: 3

Могу ли я более точно выбрать конкретное число из SQL-запроса в C#


Я работаю в приложении windows form c# vs2015, интегрированном с sql server 2012
Я сталкиваюсь с проблемой
мне нужно выбрать более конкретный номер в то же время, но я не знаю
какой запрос я пишу или что я делаю в c#
текущий i с помощью select * from table where userID=@UserID
это только номер выбора
но если мне нужно выбрать более конкретный номер
предположим, у меня есть числа от 1001 до 1020
мне нужно выбрать 1005,1009,1012,1017
Как получить результат для большего количества записей из SQL-запроса или c# в одно и то же время
любой способ, который я могу принять

Что я уже пробовал:

can i more select specific number from sql query in c#

3 Ответов

Рейтинг:
2

F-ES Sitecore

В дополнение к IN, если это диапазон, который вы хотите выбрать, то

Где userID >= 1001 и userID <=1020


ahmed_sa

СПАСИБО ЗА ОТВЕТ
если мне это нужно динамически в текстовом поле
мой secnario следующим образом
текстовое поле имеет значения 1002,1991,2007,3006
так что как выбрать эти значения

Рейтинг:
2

Richard Deeming

Цитата:
текстовое поле имеет значения 1002,1991,2007,3006
так что как выбрать эти значения

Вам нужно будет разделить текст, преобразовать каждое значение в целое число и создать параметризованную SQL-команду с помощью IN оператор:
string text = YourTextBox.Text;
string[] parts = text.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

string[] parameterNames = new string[parts.Length];
SqlParameter[] parameters = new SqlParameter[parts.Length];

for (int index = 0; index < parts.Length; index++)
{
    int value;
    if (!int.TryParse(parts[index], out value))
    {
        // TODO: Display an error to the user
        return;
    }
    
    string name = "@p" + index;
    parametersNames[index] = name;
    parameters[index] = new SqlParameter(name, SqlDbType.Int) { Value = value };
}

string sql = string.Format("SELECT * FROM table WHERE userID IN ({0})", string.Join(", ", parameterNames));

using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand(sql, connection))
{
    command.Parameters.AddRange(parameters);
    ...
}


F-ES Sitecore

Это не сработает, если количество предметов превысит 2100.

Richard Deeming

Верно, но я не мог потрудиться написать код, чтобы разделить числа на группы и рекомбинировать результаты, просто чтобы поддержать случай, который ОП не запрашивал. :)

В любом случае я сомневаюсь, что кто-то наберет список из 2100 номеров в одном текстовом поле.

Рейтинг:
1

Garth J Lancaster

Вы пробовали использовать SQL-оператор "IN"?

select * from table
where userID=@UserID
and number in (1005, 1009, 1012, 1017)