数据集的筛选和排序

动态筛选和排序数据集中的数据

View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace FilterSort
{
    class Program
    {
        static void Main(string[] args)
        {
            string connString = @"
            server = .;
            integrated security =true;
            database =northwind";

            string sql1 = @"select *  from customers";
            string sql2 = @" select * from products where unitprice<10";

            string sql = sql1 + sql2;
            SqlConnection conn = new SqlConnection(connString);
            try
            {
                conn.Open();
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = new SqlCommand(sql, conn);

                DataSet ds = new DataSet();
                da.Fill(ds, "customers");

                DataTableCollection dtc = ds.Tables;
                Console.WriteLine("Results from Customers table:");
                Console.WriteLine("CompanyName".PadRight(20) + "ContactName".PadLeft(23) + "\n");
                string f1 = "country = 'Germany'";
                string srt = "companyname desc";

                foreach (DataRow row in dtc["customers"].Select(f1, srt))
                { 
                    Console.WriteLine("{0}\t{1}",row["CompanyName"].ToString().PadRight(25),row["ContactName"]);
                }
                Console.WriteLine("\n------------------------------------------");
                Console.WriteLine("Results from Products table:");
                Console.WriteLine("ProductName".PadRight(20)+"UnitPrice".PadLeft(21)+"\n");

                foreach(DataRow row in dtc[1].Rows)
                {
                    Console.WriteLine("{0}\t{1}",row["productname"].ToString().PadRight(25),row["unitprice"]);
                }
            }
            catch (SqlException e)
            {
                Console.WriteLine("Error :{0}", e.ToString());
            }
            finally 
            {
                conn.Close();
            }
            Console.ReadKey();
        }
    }
}

示例说明:

本例中编写了两个查询,合并起来后,创建连接。

先创建数据适配器,再把数据适配器的SelectCommand属性赋予封装了查询和连接的命令。

      SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = new SqlCommand(sql, conn);

接着创建和填充数据集

      DataSet ds = new DataSet();
                da.Fill(ds, "customers");

每个查询都返回一个结果集,每个结果集都存储在单独的DataTable对象中,第一个表显式地命名为customers,第二个表使用默认名称customers1.

从数据集的Tables属性中获取DataTable对象集合,以便于以后的引用

DataTableCollection dtc = ds.Tables;

使用foreach循环, 给数据表的Select方法传送筛选和排序字符串,显示从表中选出的行。这个表就是DataTable对象集合中的customers表

 foreach (DataRow row in dtc["customers"].Select(f1,srt))
 { 
       Console.WriteLine("{0}\t{1}",row["CompanyName"].ToString().PadRight(25),row["ContactName"]);
    }

使用创建数据集时定义的表名,从表集合(dtc对象)中获得对单个DataTable对象的引用,重载的Select方法在DataTable上进行内部搜索,去除不满足选择条件的行,以规定的顺序对结果排序,最后返回DataRow的数组。在索引器中使用列名,就可以访问行中的每一列。

注意,如果对customer数据使用另一个查询,就可以得到相同的结果,而且效率高得多。

提示:一般情况下,应尽可能利用SQL从数据库中获取需要的数据,而不是编写C#过程来实现。数据库服务器对数据的选择和排序等操作进行了优化。查询功能也比本章列出的查询复杂,强大得多,在编写查询,返回需要的数据时要特别小心,不仅应使资源要求降到最低,也要减少用于处理和格式化结果集数据所需的代码。

第二个表没有被重命名(没有使用customers1),使用了序数索引:

 foreach(DataRow row in dtc[1].Rows)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值