如何从一个datatable中依次取得前100条数据,直到取完为止

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从一个datatable中依次取得前100条数据,直到取完为止相关的知识,希望对你有一定的参考价值。

也可以用数组的思维理解,从一个数组中依次取100个数,直到取完为止。怎么使用for循环

参考技术A 这是我写的一个循环取datatable的实例:
翻页的方法,下一页就将inpage+1,上一页就将inpage-1;count为总页数。
public DataTable table;
public int count = 1;
public int inpage = 1;

int i = (inpage - 1) * 10;//计算当前显示条数
int pagenum = inpage * 10;//计算当前显示最大条数
table=getdata();
count = table.Rows.Count / 10;//计算总页数
int yu = table.Rows.Count % 10;//计算是否余数是0
if (yu > 0)
count = count + 1;//有余数是总页数+1
if (pagenum > table.Rows.Count)//判断最大条数是否大于实际总条数
pagenum = table.Rows.Count;
ddlpage.Items.Clear();
for (int m = 1; m <= count; m++)

ddlpage.Items.Add(m.ToString());

string html = "<div id=\"list\" class=\"list\"><ul>";

for (int m = i; m < pagenum; m++)

string title = table.Rows[m]["TITLE"].ToString();
if (title.Length > 13)
title = title.Substring(0, 13) + "...";
int id = m + 1;
html += "<li>" + id + "、<a href=\"Ph_detail.aspx?qid=" + table.Rows[m]["ID"].ToString() + "\">" + title + "</a></li>";

html += "</ul></div>";
参考技术B for(int i =0;i<100;i++)
return datatable.Rows[i];
参考技术C http://blog.csdn.net/xianfajushi/article/details/7015535#comments?本回答被提问者采纳 参考技术D select top 100 不是更简单么?

如何从DataTable中提取数据?

我有一个从SQL查询填充到本地数据库的DataTable,但我不知道如何从中提取数据。主要方法(在​​测试程序中):

static void Main(string[] args)
{
    const string connectionString = "server=localhost\SQLExpress;database=master;integrated Security=SSPI;";
    DataTable table = new DataTable("allPrograms");

    using (var conn = new SqlConnection(connectionString))
    {
        Console.WriteLine("connection created successfuly");

        string command = "SELECT * FROM Programs";

        using (var cmd = new SqlCommand(command, conn))
        {
            Console.WriteLine("command created successfuly");

            SqlDataAdapter adapt = new SqlDataAdapter(cmd);

            conn.Open(); 
            Console.WriteLine("connection opened successfuly");
            adapt.Fill(table);
            conn.Close();
            Console.WriteLine("connection closed successfuly");
        }
    }

    Console.Read();
}

我用来在我的数据库中创建表的命令:

create table programs
(
    progid int primary key identity(1,1),
    name nvarchar(255),
    description nvarchar(500),
    iconFile nvarchar(255),
    installScript nvarchar(255)
)

如何从DataTable中提取数据到有意义的形式?

答案

DataTable有一个DataRow元素的.Rows集合。

每个DataRow对应于数据库中的一行,并包含一组列。

要访问单个值,请执行以下操作:

 foreach(DataRow row in YourDataTable.Rows)
 { 
     string name = row["name"].ToString();
     string description = row["description"].ToString();
     string icoFileName = row["iconFile"].ToString();
     string installScript = row["installScript"].ToString();
 }

另一答案

您可以将数据表设置为许多元素的数据源。

例如

网格视图

中继器

数据列表

等等

如果您需要从每行提取数据,那么您可以使用

table.rows[rowindex][columnindex]

要么

如果您知道列名称

table.rows[rowindex][columnname]

如果你需要迭代表,那么你可以使用for循环或foreach循环

for ( int i = 0; i < table.rows.length; i ++ )
{
    string name = table.rows[i]["columnname"].ToString();
}

foreach ( DataRow dr in table.Rows )
{
    string name = dr["columnname"].ToString();
}
另一答案

请考虑使用以下代码:

SqlDataReader reader = command.ExecuteReader();
int numRows = 0;
DataTable dt = new DataTable();

dt.Load(reader);
numRows = dt.Rows.Count;

string attended_type = "";

for (int index = 0; index < numRows; index++)
{
    attended_type = dt.Rows[indice2]["columnname"].ToString();
}

reader.Close();
另一答案

除非你有特殊的理由去做原始的ado.net,否则我会看看使用ORM(对象关系映射器),如nhibernate或Linq to Sql。这样你就可以查询数据库和retreive对象,使用强类型和更容易使用恕我直言。

科林G.

另一答案
var id = row.Field<int>("ID");         // extract and parse int
var name = row.Field<string>("Name");  // extract string

当您有多种数据类型(不仅仅是字符串)时,从DataTable中提取数据的最简单方法是使用Field<T>程序集中提供的System.Data.DataSetExtensions扩展方法。

来自MSDNField<T>方法:

提供对DataRow中每个列值的强类型访问。

这意味着当您指定类型时,它将验证并取消装箱对象。

例如:

// iterate over the rows of the datatable
foreach (var row in table.AsEnumerable())  // AsEnumerable() returns IEnumerable<DataRow>
{
    var id = row.Field<int>("ID");                           // int
    var name = row.Field<string>("Name");                    // string
    var orderValue = row.Field<decimal>("OrderValue");       // decimal
    var interestRate = row.Field<double>("InterestRate");    // double
    var isActive = row.Field<bool>("Active");                // bool
    var orderDate = row.Field<DateTime>("OrderDate");        // DateTime
}

它还支持可空类型:

DateTime? date = row.Field<DateTime?>("DateColumn");

这可以简化从DataTable中提取数据,因为它不需要显式地将对象转换或解析为正确的类型。

另一答案
  var table = Tables[0]; //get first table from Dataset
  foreach (DataRow row in table.Rows)
     {
       foreach (var item in row.ItemArray)
         {
            console.Write("Value:"+item);
         }
     }
另一答案

请注意,使用DataAdapter时无需打开和关闭连接。

所以我建议请更新此代码并删除连接的打开和关闭:

        SqlDataAdapter adapt = new SqlDataAdapter(cmd);

conn.Open(); //这行代码是不合适的

        Console.WriteLine("connection opened successfuly");
        adapt.Fill(table);

conn.Close(); //这行代码是不合适的

        Console.WriteLine("connection closed successfuly");

Reference Documentation

此示例中显示的代码未显式打开和关闭Connection。如果发现连接尚未打开,则Fill方法隐式打开DataAdapter正在使用的Connection。如果Fill打开连接,它也会在Fill完成时关闭连接。当您处理单个操作(如填充或更新)时,这可以简化代码。但是,如果要执行需要打开连接的多个操作,则可以通过显式调用Connection的Open方法,对数据源执行操作,然后调用Connection的Close方法来提高应用程序的性能。您应该尝试尽可能短暂地保持与数据源的连接,以释放资源以供其他客户端应用程序使用。

以上是关于如何从一个datatable中依次取得前100条数据,直到取完为止的主要内容,如果未能解决你的问题,请参考以下文章

java中如何获取结果集ResutSet的总条数?

DataTable数据过滤

怎样取得dataTable中某一单元格的值

基与datatable的分页

DataTable分页显示

怎样取得DataTable某行某列的值