做完前面的东西,我们该干什么了呢?当然是建立数据库了,总不能老是修改程序、发布;修改程序、再发布……
本来本站以及本站的联合网站都推荐 ASP.net 里的文本数据库使用 SQLite,不过这里作为例子,就拿 Access 2003 开刀了,表结构如下(这是 SQLite 的语法,Access 2003 的请参考创建):
- CREATE TABLE [User]
- (
- [usr_ID] INTEGER PRIMARY KEY AUTOINCREMENT,
- [usr_UID] TEXT COLLATE NOCASE,
- [usr_PWD] TEXT COLLATE NOCASE
- );

然后,我们需要建立一个数据库的操作类。同样,把该类库放在 ST.Base 下,具体的函数将会有:取得数据集、无返回执行及返回一行一列执行三种。在此之前,必须设定数据库路径,我们先把我们制作好的数据库 db.mdb 复制一下,然后粘贴到 ST.Page 项目下的 App_Data 目录下,方法就不多说了。然后修改 ST.Page 项目下的 Web.config 文件,文件的全部代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <configuration>
- <appSettings>
- <add key="DB" value="App_Data/db.mdb"/>
- </appSettings>
- </configuration>
创建类库的具体方法我就不说了,在第二节已经说过,这里只是说明一下,在 ST.Base 下建立一个 Database.cs 的类,public class Database 过程下有以下代码:
- //定义一个静态变量来存放连接字符串,private static 是定义静态变量的关键字
- private static string sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["DB"].ToString());
- //创建一个 Access 的连接对象 System.Data.OleDb.OleDbConnection 并且实例化
- System.Data.OleDb.OleDbConnection oConn = new System.Data.OleDb.OleDbConnection(sConn);
- //取得数据集的过程,返回的数据是 DataSet 类型
- public DataSet GetDS(string sql, int startIndex, int pageSize, string tableName)
- {
- //格式化索引及页大小
- if (startIndex < 0) { startIndex = 0; }
- if (pageSize < 0) { pageSize = 0; }
- DataSet oDS = new DataSet();
- //创建一个 try 以确保就算出错了也会返回正确的数据类型
- try
- {
- //打开数据库
- oConn.Open();
- //设置一个可填充 DataSet 的数据命令
- System.Data.OleDb.OleDbDataAdapter oDA = new System.Data.OleDb.OleDbDataAdapter(sql, oConn);
- //填充到 DataSet 里
- if (pageSize == 0) { oDA.Fill(oDS, tableName); } else { oDA.Fill(oDS, startIndex, pageSize, tableName); }
- //关闭数据库并释放所有内存
- oConn.Close();
- oConn.Dispose();
- }
- catch { }
- //返回 DataSet 数据集
- return oDS;
- }
- //创建一个 GetDS 的重载,以取得所有数据
- public DataSet GetDS(string sql, string tableName)
- {
- DataSet oDS = GetDS(sql, 0, 0, tableName);
- return oDS;
- }
- //不返回内容执行过程
- public void ExecuteNonQuery(string sql)
- {
- //打开数据库
- oConn.Open();
- //声明执行命令
- System.Data.OleDb.OleDbCommand oCMD = new System.Data.OleDb.OleDbCommand(sql, oConn);
- //开始执行
- oCMD.ExecuteNonQuery();
- //释放执行命令的内存
- oCMD.Dispose();
- //关闭数据库并释放所有内存
- oConn.Close();
- oConn.Dispose();
- }
- //不返回内容执行过程
- public object ExecuteScalar(string sql)
- {
- //声明执行返回变量
- object oR = new object();
- //打开数据库
- oConn.Open();
- //声明执行命令
- System.Data.OleDb.OleDbCommand oCMD = new System.Data.OleDb.OleDbCommand(sql, oConn);
- //开始执行
- oR = oCMD.ExecuteScalar();
- //释放执行命令的内存
- oCMD.Dispose();
- //关闭数据库并释放所有内存
- oConn.Close();
- oConn.Dispose();
- return oR;
- }
那么,这个类的用法就暂时不说什么了,因为都加了注释的,大家可以自己看。另外,我个人是建议在深层类库里都不要加 try 语句,除非迫不得已,不然在外层处理的时候不好取到错误信息。下一节,我们暂时还使用不到这个类库,我将给大家讲解表单和取值(当然就包含静态过程了)。
大体是一样,只是内核和后缀不一样而已。
10W 啊……人民币?哈哈~真会幻想!