您的位置:首页 > 数据库

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

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

针对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>

也是可以的。

有时候

优化

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

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

研究下去,估计还有更多发现的...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: