• 针对mdb数据库不同字符串连接的应用和初探(含Repeater小学习)


    近日研究整合多种功能的系统,遇到一些问题,与以前一些知识结合,感觉又有了新的理解,并且遇到不理解的疑问,多查网络就可以解决了。

    针对mdb中,

    1、一般config文件中,目前发现的最好些法是

    <add key="ConnectionString" value="provider=Microsoft.Jet.OLEDB.4.0; Data Source="/>
            <add key="Path" value="~/App_Data/ok.mdb"/> 形式

    然后,在类文件中定义

     public static readonly string conn = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString() + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["Path"]) + ";";

    这是我发现最好的写法,因为涉及下面的一些常应用。

    2、类文件中写

    public static OleDbConnection Acc_Conn()  //数据库连接
      { 
       OleDbConnection acc_conn=new OleDbConnection (conn);
                return acce_conn;               
      } 

     public static DataSet accessGetDataSet(string sql)  //定义数据记录集
      {
                OleDbConnection Conn = Acc_Conn();
                OleDbDataAdapter data = new OleDbDataAdapter (sql, Conn);//已经选择了数据
       DataSet DS = new DataSet();//定义好数据集
              data.Fill(DS);;//数据填充到数据集里
       return DS;
      }

    3、应用

    如果要获得数据库的一个表table1的一个字段,很简单

    string sql="select * form table1 where id="+id;

    string ziduan=class_name.accessGetDataSet(string sql).table[0].rows[0].["需要字段"].toString();

    实在好用的,

    4、我之所以写,是因为这时候,有一种情况,就是当各个web页面分布在不同层的目录,这时候,有以下的做法

    先在类中写方法

    public string accessdb3()
        {
            string path = "provider=microsoft.jet.oledb.4.0;data source=" + System.Web.HttpContext.Current.Server.MapPath(@"..\..\App_Data\ok.mdb");//这里表示这页面离根目录有两层
                    return path;
        }

    当应用的时候,就写

    class_name d1=new class_name();//class_name是类,这里要实例化才可以用的

    string path = d1.accessdb3();           
      conn = new OleDbConnection(path);
      conn.Open();

    OleDbCommand cmd = new OleDbCommand(sql, conn);
                OleDbDataReader odr = cmd.ExecuteReader();
                while (odr.Read())//读数据

    {    

    do anything;

    }

    odr.close();

    conn.close();

    如果我们需要高度统一,可读性强,又与以前的一些好的风格一致,我做了如下修改,大侠请指正。

    可以在类文件中写

    public static DataSet accessGetDataSet3(string sql)  //定义数据记录集
        {
            dbcenter db3 = new dbcenter();//这里已经实例化了
            string db3_path = db3.accessdb3();
            OleDbConnection Conn = new OleDbConnection(db3_path);
            OleDbDataAdapter data = new OleDbDataAdapter(sql, Conn);//已经选择了数据
            DataSet DS = new DataSet();//定义好数据集
            data.Fill(DS); ;//数据填充到数据集里
            return DS;
        }

    这样写,又可以应用到第3点的方法了。

    string edit_type ;

    edit_type = class_name.accessGetDataSet3("select * from ok where ok_id="+id).Tables[0].Rows[0]["edit_type"].ToString();//主要是取数据方便

    就是简单修改了下,只修改连接字符串的一些定义而已,如果写不好,还可能引发有

    “从索引 0 处开始,初始化字符串的格式不符合规范”等错误,不过,慢慢地,能读懂,也就能想办法解决的了

    再举一个例子:我们平时可能用到组件Repeater来显示数据.而且要分页.我们看看两种写法的比较

    第一种,

           PagedDataSource pds = new PagedDataSource();
           pds.DataSource = class_name.accessGetDataSet3("select * from edit_ok order by edit_id desc").Tables[0].DefaultView;        
           

    pds.CurrentPageIndex = Convert.ToInt32(Label2.Text) - 1;
            pds.AllowPaging = true;
            pds.PageSize = 10;//设置每个页面显示的数量
            Repeater1.DataSource = pds;
            Label1.Text = pds.PageCount.ToString();//获取所有页面
            Label2.Text = (pds.CurrentPageIndex + 1).ToString(); //获取当前页面
            this.lbtnpritPage.Enabled = true;
            this.lbtnFirstPage.Enabled = true;
            this.lbtnNextPage.Enabled = true;
            this.lbtnLastPage.Enabled = true;

            if (pds.CurrentPageIndex < 1)
            {
                this.lbtnpritPage.Enabled = false;
                this.lbtnFirstPage.Enabled = false;
            }
            if (pds.CurrentPageIndex == pds.PageCount - 1)
            {
                this.lbtnNextPage.Enabled = false;
                this.lbtnLastPage.Enabled = false;
            }
            Repeater1.DataBind();

    第二中写法

            OleDbConnection conn;       

             PagedDataSource pds = new PagedDataSource(); 

            class_name d1 = new class_name();
            string path=d1.accessdb3();
            conn = new OleDbConnection(path);
            string sql = "select * from edit order_ok by edit_id desc";
            OleDbDataAdapter oda = new OleDbDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            oda.Fill(ds, "title");
             pds.DataSource = ds.Tables[0].DefaultView;

    pds.CurrentPageIndex = Convert.ToInt32(Label2.Text) - 1;
            pds.AllowPaging = true;
            pds.PageSize = 10;//设置每个页面显示的数量
            Repeater1.DataSource = pds;
            Label1.Text = pds.PageCount.ToString();//获取所有页面
            Label2.Text = (pds.CurrentPageIndex + 1).ToString(); //获取当前页面
            this.lbtnpritPage.Enabled = true;
            this.lbtnFirstPage.Enabled = true;
            this.lbtnNextPage.Enabled = true;
            this.lbtnLastPage.Enabled = true;

            if (pds.CurrentPageIndex < 1)
            {
                this.lbtnpritPage.Enabled = false;
                this.lbtnFirstPage.Enabled = false;
            }
            if (pds.CurrentPageIndex == pds.PageCount - 1)
            {
                this.lbtnNextPage.Enabled = false;
                this.lbtnLastPage.Enabled = false;
            }
            Repeater1.DataBind();

     这样,红色一句等于蓝色的几行了。应该是高度的浓缩.但研究下去也是有一定区别的。第一种是用类内的方法,而另外一种是重新定义实例化才应用。不过,第二种来说是比较传统的,不够高度集中和浓缩.

    这里也当做Repeater的一个简单学习吧.嘿嘿!

    记得了,这里Repeater是在html源代码中写的代码,没有gridview的那种编辑向导的,但有数据源向导,也可以写代码连接数据库,连接后,就可以这里写(这里用表格显示三列)

    <table width="95%" border="0" align="center" cellpadding="1" cellspacing="1" bgcolor="#f1f1f1">
                <td width="30%">文章标题</td>
                <td width="17%">加入时间</td>
                <td width="8%">操   作</td>
              </tr>

    <ItemTemplate>
                        <tr bgcolor="#FFFFFF" align="center" >
                        <td align="left"><img src="../images/admin_top_open.gif"  height="16"/><a href='admin_edit_edit.aspx?id=<%# Eval("edit_id")  %>'><%# Eval("edit_title") %></a>

                       </td>

                        <td align="center"><%# Eval("edit_time") %>

                        </td>

                       <td align="center"><a href='admin_edit_edit.aspx?id=<%# Eval("edit_id")  %>'>修改</a><a href='admin_edit_delete.aspx?id=<%# Eval("edit_id")  %>'>  删除</a>
                        </td>
                        </tr>
                        </ItemTemplate>

    </table>

    或者简单的不用表格的写法,只显示一个字段和对应的链接

    <ItemTemplate>

            <li><a href='<%# Eval("edit_title_link)%>' target="_blank">
                <%# Eval("edit_title")%></a></li>
    </ItemTemplate>

     也是可以的。

    有时候

    优化

    直接使用DataItem可减少Eval函数的执行步骤,优化页面解析时间:

    <%# ((DataRowView)Container.DataItem)["edit_title"]%>替换<%# Eval("edit_title")%>

    研究下去,估计还有更多发现的...

  • 相关阅读:
    第二天与第三天的总结
    随手写的总结关于
    第一次编程作业
    第一次博客作业
    CSS学习笔记-04 a标签-导航练习
    CSS学习笔记-03- 过渡模块之前奏篇 a标签的伪类选择器
    CSS学习笔记-02. 2D转换模块-形变中心点
    CSS学习笔记-01-2D转换模块
    从今天开始 每天记录HTML,CSS 部分的学习笔记
    回流和重绘
  • 原文地址:https://www.cnblogs.com/pyman/p/2321839.html
Copyright © 2020-2023  润新知