idhris2011 Ответов: 7

Чтобы выбрать конкретную строку из datatable


У меня есть datatable, полный значений, извлеченных из базы данных...(поля идентификатора Sid,SNAME)

из этой таблицы данных мне нужно выбрать только несколько строк...например, мне нужно выбрать строки, содержащие SID in(101,102,109)..

Мне посоветовали использовать ключевое слово IN, такое как Sql, чтобы получить эти данные из datatable...


Я не знаю как?Помоги мне

7 Ответов

Рейтинг:
2

Wes Aday

Как использовать в[^]

И вы можете подумать о том, чтобы выразить некоторую признательность тем, кто ответил на ваши вопросы.


VJ Reddy

Хорошая рекомендация. 5!

[no name]

Спасибо

idhris2011

мне нужно использовать ключевое слово IN для извлечения данных из datatable в Csharp, а не sql

[no name]

"In" в C# идет с циклом foreach.

VJ Reddy

- Вы правы. Но внутри фильтра выражение имеет значение аналогичное значению SQL IN как описано здесь http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

Рейтинг:
2

Mohamed Mitwalli

Привет ,
попробовать это

protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=test;Integrated Security=True");
        string statment = "select item_code, Item_name, brand, size, section, price, Material, Qty, tax, tt  from Items ";
        SqlDataAdapter da = new SqlDataAdapter(statment, con);       
        DataSet ds = new DataSet();
        da.Fill(ds);
        DataRow[] foundRows = ds.Tables[0].Select("item_code = 1", " item_code DESC", DataViewRowState.CurrentRows);
        //this is for create datatable with same schema like the orginal one .
        string statment2 = "select item_code, Item_name, brand, size, section, price, Material, Qty, tax, tt  from Items where  item_code = 0";
        SqlDataAdapter da2 = new SqlDataAdapter(statment2, con);
        DataTable dt = new DataTable();
 
        da2.Fill(dt);
        DataRow dr = dt.NewRow();   
        foreach (DataRow row in foundRows)
        {            
            dr[0] = row[0];
            dr[1] = row[1];
            dr[2] = row[2];
            dr[3] = row[3];
            dr[4] = row[4];
            dr[5] = row[5];
            dt.Rows.Add(dr);
        }
        con.Close();
        cmd.Dispose();
        GridView1.DataSource = dt; 
        GridView1.DataBind();
    }


с уважением
М. Митвалли


Рейтинг:
1

bopannavb

DataRow[] rows= dt.Select("Columnname IN (PID)");

dt=Имя объекта DataTable


idhris2011

Эй, тнз, чувак, правильно солн

Рейтинг:
1

dj dourak

Я не совсем понимаю, что ты имеешь в виду. Но у меня есть идея, которая может вам помочь.
Вы можете попробовать:

select * from [name of your table] where sid=101 or sid=102 or sid=109;

Если у вас есть объект DataTable вы можете получить доступ к данным с помощью следующей инструкции:
string theData = [name of your object].Rows[Y].ItemArray[X].ToString();

Y-индекс строки (первая строка равна 0), а x - индекс столбца.


idhris2011

это похоже на использование ключевого слова IN в LINQ..

у меня уже есть datatable, из этого datatable мне нужно выбрать некоторые строки, используя ключевое слово IN

Рейтинг:
1

Jαved

Привет,
Сделай это вот так...

Select * from [TableName] where SID IN(101,102,109);


Рейтинг:
1

Andrei Khamenka

string sql = "SELECT SID, SNAME from Your Table";
            DataRow dtrownew;
            int i=0;
            SqlConnection sqlcon = new SqlConnection("Data Source=server;Initial Catalog=database;uid=user;pwd=password");
            sqlcon.Open();
            SqlDataAdapter adapter = new SqlDataAdapter(sql, sqlcon);
            DataSet dataSet = new DataSet("DS");
            adapter.Fill(dataSet, "TBL");
            //create new table with the original structure
            DataTable dttable = dataSet.Tables["TBL"].Clone();
            //loop though each row
            foreach (DataRow dtrow in dataSet.Tables["TBL"].Select("SID IN (101,102,109)"))
            {
                dtrownew = dttable.NewRow();
                //copy each field value to the new table
                while (i < dtrow.ItemArray.Length)
                {
                    dtrownew[i] = dtrow[i];
                    i++;
                }
                dttable.Rows.Add(dtrownew);
                i = 0;
            }
            gvCustomers.DataSource = dttable;
            gvCustomers.DataBind();


Рейтинг:
0

VJ Reddy

Ссылка на данное Уэс День очень хороший. Но, поскольку в вопросе было задано получить строки из a DataTable, этот Select способ получения DataTable может использоваться следующим образом:

DataRow[] rows = DataTable1.Select(
                    "SID IN (101,102,109)", "", 
System.Data.DataViewRowState.CurrentRows);

Выражения фильтра, которые могут быть использованы в Select метод описан тут
http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx[^]
Если возвращаемые строки должны быть sorted, то второй параметр Select метод может быть использован как описано здесь
http://msdn.microsoft.com/en-us/library/b5c0xc84.aspx[^]
То System.Data.DataViewRowState.CurrentRows значение перечисления используется в качестве третьего параметра в приведенном выше примере Select метод, позволяющий избежать возврата строк deleted в DataTable с помощью Row.Delete метод.


[no name]

Ницца

VJ Reddy

Спасибо, Уэс.