none
【ASP.NET】在没有数据集DataSet的情况下可以使用SQL语句进行查询吗? RRS feed

  • 问题

  • 我利用DirectoryInfo类检索了网站某文档中的数据,并声明了DataTable构造了一个数据表,同时也添好了之前检索过来的数据。由于利用AspNetPager控件进行分页,肯定得和数据库打交道。现在问题来了,由于没有本例中没有用到数据集DataSet是否可以利用sql语句在已构造的DataTable中进行sql查询等操作呢?

    其实我的目的是想获取分页最大记录和最小记录,根据以往的经验,这都是需要和sql数据库打交道的,如下面的语句。但是目前没有和数据库打交道,我应该如何来实现呢?先谢谢了!请指教!

            int StarRecord = AspNetPager1.PageSize * (AspNetPager1.CurrentPageIndex - 1);
            int MaxRecord = AspNetPager1.PageSize;
            this.GridView1.DataSource = GetList(sql, StarRecord, MaxRecord).Tables["tb_product"];


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com

    2012年5月8日 6:26

答案

  • 楼主好:)

    你的问题和http://social.msdn.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/a6d5bb3c-34a9-499c-9146-dda078a531ec/#a6d5bb3c-34a9-499c-9146-dda078a531ec很相似。我建议参考此代码:因为和数据库打交道,也就是把我以下的代码用SqlDataAdapter+DataTable来完成,最好用存储过程,这样传入起始页和每页最大的记录数即可。

    /// <summary>
            /// 分页显示的数据
            /// </summary>
            /// <param name="startIndex">从0开始</param>
            /// <param name="RowNumber">当前页最大可以显示的数据,下标为1</param>
            /// <returns></returns>
            public static DataTable SelectByPage(int StartRowIndex, int MaximumRows)
            {
                  //此处使用存储过程分页方式,结果返回DataTable即可。
            }

    关于存储过程分页,您具体可以参考:

    http://www.cnblogs.com/taewind/archive/2006/12/12/589131.html


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    感谢大家,这个问题已经得到解决。最后利用PageDataSource类解决了此问题。代码如下

                DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/uploads/"));
                FileInfo[] fis = di.GetFiles();
                if (fis.Length == 0)
                {
                    DataControlEmpty();
                }
                else
                {
                    DataTable dt = new DataTable("ftable");
                    dt.Columns.Add("imgurl", typeof(String));
                    dt.Columns.Add("filename", typeof(String));
                    dt.Columns.Add("filesize", typeof(String));
                    dt.Columns.Add("imgtype", typeof(String));
                    dt.Columns.Add("time", typeof(String));
                    foreach (FileInfo fi in fis)
                    {
                        DataRow dr = dt.NewRow();
                        dr[0] = this.ResolveUrl("~/uploads/") + fi.Name;
                        dr[1] = fi.Name;
                        dr[2] = fi.Length;
                        dr[3] = ImgType(fi.Extension.Substring(1));
                        dr[4] = fi.CreationTime;
                        dt.Rows.Add(dr);
                    }
                PagedDataSource pds = new PagedDataSource();
                pds.DataSource = dt.DefaultView;
                pds.AllowPaging = true;
                pds.PageSize = 9;//每页显示记录数
                pds.CurrentPageIndex = this.AspNetPager1.CurrentPageIndex - 1;//当前页的页码,从0开始
                this.AspNetPager1.RecordCount = di.GetFiles().Length;
                this.DataList1.DataSource = pds;
                this.DataList1.DataBind();

                }

    这样看的话,AspNetPager1不是非要依赖数据适配器SQLDataApater。


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com

    • 已标记为答案 jinwb1982 2012年5月9日 17:18
    2012年5月9日 17:18

全部回复

  • 楼主好:)

    你的问题和http://social.msdn.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/a6d5bb3c-34a9-499c-9146-dda078a531ec/#a6d5bb3c-34a9-499c-9146-dda078a531ec很相似。我建议参考此代码:因为和数据库打交道,也就是把我以下的代码用SqlDataAdapter+DataTable来完成,最好用存储过程,这样传入起始页和每页最大的记录数即可。

    /// <summary>
            /// 分页显示的数据
            /// </summary>
            /// <param name="startIndex">从0开始</param>
            /// <param name="RowNumber">当前页最大可以显示的数据,下标为1</param>
            /// <returns></returns>
            public static DataTable SelectByPage(int StartRowIndex, int MaximumRows)
            {
                  //此处使用存储过程分页方式,结果返回DataTable即可。
            }

    关于存储过程分页,您具体可以参考:

    http://www.cnblogs.com/taewind/archive/2006/12/12/589131.html


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月8日 6:42
    版主
  • 楼主好:)

    你的问题和http://social.msdn.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/a6d5bb3c-34a9-499c-9146-dda078a531ec/#a6d5bb3c-34a9-499c-9146-dda078a531ec很相似。我建议参考此代码:因为和数据库打交道,也就是把我以下的代码用SqlDataAdapter+DataTable来完成,最好用存储过程,这样传入起始页和每页最大的记录数即可。

    /// <summary>
            /// 分页显示的数据
            /// </summary>
            /// <param name="startIndex">从0开始</param>
            /// <param name="RowNumber">当前页最大可以显示的数据,下标为1</param>
            /// <returns></returns>
            public static DataTable SelectByPage(int StartRowIndex, int MaximumRows)
            {
                  //此处使用存储过程分页方式,结果返回DataTable即可。
            }

    关于存储过程分页,您具体可以参考:

    http://www.cnblogs.com/taewind/archive/2006/12/12/589131.html


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    感谢大家,这个问题已经得到解决。最后利用PageDataSource类解决了此问题。代码如下

                DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/uploads/"));
                FileInfo[] fis = di.GetFiles();
                if (fis.Length == 0)
                {
                    DataControlEmpty();
                }
                else
                {
                    DataTable dt = new DataTable("ftable");
                    dt.Columns.Add("imgurl", typeof(String));
                    dt.Columns.Add("filename", typeof(String));
                    dt.Columns.Add("filesize", typeof(String));
                    dt.Columns.Add("imgtype", typeof(String));
                    dt.Columns.Add("time", typeof(String));
                    foreach (FileInfo fi in fis)
                    {
                        DataRow dr = dt.NewRow();
                        dr[0] = this.ResolveUrl("~/uploads/") + fi.Name;
                        dr[1] = fi.Name;
                        dr[2] = fi.Length;
                        dr[3] = ImgType(fi.Extension.Substring(1));
                        dr[4] = fi.CreationTime;
                        dt.Rows.Add(dr);
                    }
                PagedDataSource pds = new PagedDataSource();
                pds.DataSource = dt.DefaultView;
                pds.AllowPaging = true;
                pds.PageSize = 9;//每页显示记录数
                pds.CurrentPageIndex = this.AspNetPager1.CurrentPageIndex - 1;//当前页的页码,从0开始
                this.AspNetPager1.RecordCount = di.GetFiles().Length;
                this.DataList1.DataSource = pds;
                this.DataList1.DataBind();

                }

    这样看的话,AspNetPager1不是非要依赖数据适配器SQLDataApater。


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com

    • 已标记为答案 jinwb1982 2012年5月9日 17:18
    2012年5月9日 17:18