Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > параметры для IN clause


Автор: Bogdan1024 5.10.2009, 19:47
Есть SQL в стиле:
[SRC sql]SELECT ID, NAME FROM T WHERE ID IN (1, 2, 3)[/SRC]
Я использую SqlCommand.
Как добавить туда 1, 2, 3 одним параметром? 

Автор: Gluttton 5.10.2009, 21:28
Я делал так:
Код

FbConnection^ cntn=gcnew FbConnection(bldr->ConnectionString);         
System::String^ queryString;
queryString=L"SELECT G, T, GI, TI FROM TYPES("+
    (safe_cast<TBorder^>(e->Argument)->getXS()).ToString()+", "+
    (safe_cast<TBorder^>(e->Argument)->getYS()).ToString()+", "+
    (safe_cast<TBorder^>(e->Argument)->getXF()).ToString()+", "+
    (safe_cast<TBorder^>(e->Argument)->getYF()).ToString()+");";
try {
    cntn->Open();
    FbTransaction^ trn=cntn->BeginTransaction();
    FbCommand^ cmd=gcnew FbCommand(queryString, cntn, trn);
    FbDataReader^ rdr;
    rdr=cmd->ExecuteReader(CommandBehavior::CloseConnection);
    while(rdr->Read()) {
        TGT^ GT=gcnew TGT();
        GT->setG(rdr[0]->ToString());
        GT->setT(rdr[1]->ToString());
        GT->setGroupInfo(rdr[2]->ToString());
        GT->setTypeInfo(rdr[3]->ToString());
    }
}

Т.е. из объекта TBorder я "вытягивал" входные данные, которые преобразовывал в строку...
Выполнял запрос и результат передавал объекту GT...
Одним словом, если по сути вопроса, то строкой которая формируется на этапе выполнения...

Автор: Любитель 5.10.2009, 21:39
Цитата(Bogdan1024 @  5.10.2009,  19:47 Найти цитируемый пост)
Как добавить туда 1, 2, 3 одним параметром?  

Это СУБД-зависимо. В общем случае - никак. Лучший способ (в большинстве случаев) передачи множества данных в T-SQL - это использование XML. Если перформанс некритичен (ну, точнее так - если данных передаётся не много), то действительно вполне пойдёт конкатенция запроса:
Код

string query = string.Format("select * from Products where ID in ({0})", string.Join(", ", ids.Select(id => id.ToString()).ToArray()));

Автор: Bogdan1024 7.10.2009, 14:44
Ну какбэ я решил делать путём составления SQL так как оказывается такая проблема с помощью SqlCommand.Parameters не решается. Всем спасибо за ответы smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)