Как выбрать конкретные строки таблицы SQL без зацикливания в .net - PullRequest
0 голосов
/ 28 апреля 2011

Предположим, у меня есть таблица с именем "Имена"

ID | Name
---+--------------
1  | Bob
2  | Billy
3  | James
4  | John
5  | Tom
and on and on with thousands of names...

Предположим, что я написал следующий код .net для получения имен:

   public DataSet selectFromNames()
    {
        const string SQL_STATEMENT =
        @"SELECT Id, Name From Names;";

        Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>("MyConnection");

        DbCommand command = db.GetSqlStringCommand(SQL_STATEMENT);
        command.CommandType = CommandType.Text;
        command.CommandText = SQL_STATEMENT;

        DataSet ds = db.ExecuteDataSet(command);
        return ds;
    }

Это прекрасно работает.Что делать, если я хочу, чтобы функция имела параметр целочисленного массива, определяющий строки имен, которые я хочу получить?Как бы я написал этот запрос?

Я знаком с передачей параметров как @parameter, но я не знаю, как передать массив с помощью построителя строк, чтобы написать что-то вроде where ID in (1,2,3), чтобезобразный и подверженный ошибкам.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2011

как насчет этого (используя LINQtoSQL)?

//...  
int[] idList = new int[] { 1, 2, 3, 4 };
var myNames = from n in db.Names
              where idList.Contains(n.ID)
              select n;

(поднято с Создание запросов IN с помощью Linq To SQL )

0 голосов
/ 28 апреля 2011

Предложите использовать UDF SQL Server, чтобы помочь вам. Вот статья , объясняющая, как реализовать это .

По сути, вы бы создали UDF для разделения varchar() на переменную таблицы. Давайте назовем это dbo.MySplit().

Тогда вы могли бы:

string sql = "SELECT * FROM Table WHERE ID IN (SELECT Item FROM dbo.MySplitUDF(@csv));";
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@csv", string.Join(",",myIntegerArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...