【asp源码栏目提醒】:网学会员asp源码为您提供ASP数据库操作类 转自狩魔猎人的百度空间 - 互联网参考,解决您在ASP数据库操作类 转自狩魔猎人的百度空间 - 互联网学习中工作中的难题,参考学习。
ASP数据库操作类 转自狩魔猎人的百度空间
ASP数据库操作类转自狩魔猎人的百度空间2010-04-21 0801对于
ASP的使用者来说在数据库操作上越简单就有更多的时间去考虑逻辑上和应用上的代码效率也会更高。
今天俺在这里给大家提供一种数据库操作的思路这些代码是俺在长期的
ASP应用中不断完成和修正的也已经用它完成了很多项目了应该说直接拿去用是没有问题的。
当然本人能力也有限希望大家一起来讨论。
说明此帖代码均是VBScript版本。
另外最好你对手写
ASP已经有一定的基础。
先简单介绍一下俺这个类的一些特点 可同时操作多个不同类型的数据库。
完全不用考虑数据类型的差别再也不用想字符型字段加不加单引号。
调用非常简单对数据库的主要操作一般只需要一行代码。
支持mssql事务回滚。
可自动生成和输出sql语句方便调试。
使用方法 1.修改clsDbctrl.
asp文件中的第1行为你自己的数据库位置修改方法参考下面的CreatConn函数说明。
如需连接多个数据库可自行添加格式相同。
2.在你新建的
asp文件中包含此
asp文件。
如--include fileInc/clsDbctrl.
asp--或者--include virtual/Inc/clsDbctrl.
asp-- 3.使用如下代码应用此类一个数据库连接 OpenConn打开数据库连接Dim dbSet dbNew DbCtrl建立对象Your Code Here.CodbCloseConn释放对象关闭数据库连接 或者一个或者多个数据库连接 Dim db1Set db1New DbCtrldb1.dbConnOcaDim db2Set db2New DbCtrldb2.dbConnOcbYour Code Here.Codb1Codb2 4.具体操作的例子可以参考各函数说明内的代码示例。
方法和属性概览详细用法及例子在下面 引用CreatConn生成数据库连接字符串Oc建立数据库连接Co释放对象OpenConn打开默认数据库连接CloseConn关闭默认数据库连接dbCtrl.dbConn属性获取要操作的数据库连接默认值为Conn dbCtrl.dbErr属性只读输出捕获的错误信息dbCtrl.Version属性只读程序版本信息dbCtrl.AutoId方法自动获取唯一序列号dbCtrl.GetRecord方法取得符合条件的纪录集dbCtrl.GetRecordBySql方法根据sql语句取得纪录集dbCtrl.GetRecordDetail方法根据某一条指定纪录的详细数据dbCtrl.AddRecord方法添加一个新的纪录dbCtrl.UpdateRecord方法根据指定条件更新纪录dbCtrl.DeleteRecord方法删除符合条件的纪录dbCtrl.ReadTable方法根据指定条件获取某条纪录中的其他字段的内容dbCtrl.C方法关闭纪录集对象dbCtrl.wGetRecorddbCtrl.wAddRecorddbCtrl.wUpdateRecorddbCtrl.wDeleteRecord这4个方法是取得相应的操作前面加w的sql语句 参数约定 由于
ASP没有Arguments对象不能使用动态参数所以在本类的代码中使用了Array数组来达到这一效果。
本类中的部分参数可以使用数组参数说明中有注明但使用数组时应参照以下格式 ArrayField1Value1Field2TrueField3100 对有点像json的格式如果涉及到变量那就这样 ArrayField1Value1Field2Value2Field3Value3 可以这样说本类中的几乎所有与数据库字段相关的内容都可以用以上的数组格式来设置条件或者是获取内容。
而这里最大的特点就是在使用时不用去考虑字段的类型在字段后跟一个冒号接着跟上相应的值就行了。
如果你经常手写
ASP程序的话你很快就会感受到运用这种方式的魅力除了数据类型不用考虑之外它也很方便随时添加和删除条件。
如果你还不明白怎么用的话没关系下面有很多例子可以说明这个问题。
要把
ASP的数据库操作封装起来其实并不难相信大家以前自己也做过类似的代码或是借用过其他人的封装好的代码。
但是就如各位知道的一样使用封装后的代码一旦出错排错是一个比较麻烦的事情一般说来封装后操作越简单的排错也越复杂。
俺在写这些代码的时候已经尽我所能考虑到如果出错的话如何去排查错误在尽可能简化用户操作数据库的代码的同时可以随时输出sql语句排查错误。
最后需要说明一点本文所涉及的
ASP数据库操作并不适合大型数据如你所知操作大型数据最好还是使用存储过程之类的东东比较好以后俺会考虑把对存储过程的操作也封装进去。
还有一个效率问题要追求高效率的话用
ASP还是应该考虑COM等所以再次声明本类适用的对象是中小型
ASP项目。
好了下面奉上详细使用说明 一.数据库连接 考虑到大多数人的使用习惯在数据库连接上使用了公共过程所以需要大家在代码里自行修改如果你已经建立了数据库连接把这几行注释掉就行了。
代码中内置了MSSqlAccessMySQLOracle4种数据库的连接方式当然你也可以自行在源代码中增加或删除。
修改例如 Dim aaCreatConn0TestDatalocalhostusernameuserpasswordDim bbCreatConn1Data/TestDb.mdb 说明一下第1个参数可以是字符串。
如果是使用Access则第2个参数输入相对路径和绝对路径都是可以的如有密码也可以在第5个参数中输入如 Dim ccCreatConnACCESSEMyWebDataTestDB.mdbmdbpassword 相关函数 原型CreatConndbTypestrDBstrServerstrUidstrPwd功能建立数据库连接字符串返回值String参数dbTypeInteger or String连接数据库类型0 orMSSQL-Microsoft SQL Server1 orACCESS-Microsoft Office Access2 orMYSQL-MySQL Server3 orORACLE-Oracle Server strDBString数据库名或数据库地址Access使用绝对或者相对路径均可strServerString数据库服务器地址Access请留空strUidString数据库用户名Access请留空strPwdString数据库密码 原型OcconnStr功能打开数据库连接返回值Object数据库连接对象参数connStrString数据库连接字符串由CreatConn函数生成 原型Coobj功能关闭对象参数objObject要关闭的对象名称 原型OpenConn功能打开默认数据库连接会自动建立一个名称为Conn的连接对象参数无 原型CloseConn功能关闭名称为Conn的默认数据库连接对象参数无 二.数据库操作 下面就是本数据库操作类的函数功能说明应该算是手册了请多看例子的应用。
原型dbCtrl.dbConnobjConn功能获取数据库连接对象参数objConnObject已经建立的数据库连接对象举例Dim dbSet dbNew DbCtrl db.dbConnOcCreatConn1EWebSiteMySiteDataTestDb.mdbCodb 说明此属性为可选如果不指定此属性则默认数据连接为页面上名称为Conn的数据库连接对象 原型dbCtrl.AutoIDTableName功能自动获取唯一序列号自动编号返回值Integer参数TableNameString需要获得唯一序列号的数据表名举例Dim newId newIddb.AutoIdTestTableResponse.WritenewId 原型dbCtrl.GetRecordTableNameFieldsListConditionOrderFieldShowN功能取得符合条件的纪录集返回值Object纪录集对象参数TableNameString表名称FieldsListString字段名称用逗号隔开留空则为全部字段ConditionString or Array查询条件如果是数组应遵循前面的参数约定OrderFieldString排序方式ShowNInteger获取纪录的数量相当于sql中的Select Top N举例Dim rs Set rsdb.GetRecordTestTablefIdfNamefAgefSex男And IsActive1fName Asc0While Not rs.eof Response.WriteName isrs1Age isrs2br/rs.movenextWend db.Crs 对于以上的例子用下面的数组方式指定条件是等价的 Set rsdb.wGetRecordTestTablefIdfNamefAgeArrayfSe x男IsActive1fName Asc0 另外你可以用下面的语句来查看这个函数生成的sql语句 Response.Writedb.wGetRecordTestTablefIdfNamefAgeArrayfSex男IsActive1fName Asc0 如你所见只需要在原来的函数前加一个w即可。
原型dbCtrl.GetRecordBySQLstrSelect功能根据sql语句取得纪录集返回值Object纪录集对象参数strSelectString用于生成记录集的SQL语句举例Dim rs Set rsdb.GetRecordBySQLSelect a.Ida.LastNameb.Group From User aInnerJoin Depart bOn a.GroupIdb.GroupIdYour Code Here.db.Crs 原型dbCtrl.GetRecordDetailTableNameCondition功能根据某一条指定纪录的详细数据返回值Object纪录集对象参数TableNameString表名称ConditionString or Array查询条件如果是数组应遵循前面的参数约定举例Dim rsId IdRequest.QueryStringidSet rsdb.GetRecordDetailTestTableIdidYour Code here.db.Crs 说明就像你已经看出来的一样这个最常用在打开某个详细页面比如新闻内容页面 原型dbCtrl.AddRecordTableNameValueList功能添加一个新的纪录返回值新记录的Id号成功or 0失败参数TableNameString表名称ValueListArray插入表的字段和值只能是数组且应遵循前面的参数约定举例Dim fNamefSexfWorkYearfBirth fName王二坛fSex男fWorkYear12 fBirthCdate1981-10-23Dim result resultdb.AddRecordTestTableArrayNamefNameSexfSexWorkYearfWorkYearBirthdayfBirthIsActiveTrueIf result 0Then Response.Write添加记录成功此记录的自动编号Id为resultEnd If 看见了吧真的不用考虑字段的类型是什么滴。
如果你想要代码中的字段和值看得更清楚一点也可以这样写但凭卿之所好 resultdb.AddRecordTestTableArrayNamefName_SexfSex_WorkYearfWorkYear_BirthdayfBirth_IsActiveTrue 另外你可以用下面的语句来查看这个函数生成的sql语句 Response.Writedb.wAddRecordTestTableArrayNamefNameSexfSexWorkYearfWorkYearBirthdayfBirthIsActiveTrue 说明返回的Id值用的是比较笨的方法并不能保证在并发数据量大的时候的准确性慎用。
原型dbCtrl.UpdateRecordTableNameConditionValueList功能根据指定条件更新纪录返回值1成功or 0失败参数TableNameString表名称ConditionString or Array更新条件如果是数组应遵循前面的参数约定ValueListString or Array更新的字段及值如果是数组应遵循前面的参数约定举例Dim fNamefWorkYear fName王三坛fWorkYear10 Dim result resultdb.UpdateRecordTestTableUId1308ArrayNamefNameWorkYearfWorkYearIf result 0Then Response.Write更新数据成功End If 另外你可以用下面的语句来查看这个函数生成的sql语句 Response.Writedb.wUpdateRecordTestTableUId1308ArrayNamefNameWorkYearfWorkYear 原型dbCtrl.DeleteRecordTableNameIDFieldNameIDValues功能删除符合条件的纪录返回值1成功or 0失败参数TableNameString表名称IDFieldNameString表的Id字段的名称IDValuesString or Array删除条件可以是由逗号隔开的多个Id号如果是数组应遵循前面的参数约定举例Dim idsresult idsRequest.Formselectid可以假设这里获取的值是1234256314复选框提交的值都这样resultdb.DeleteRecordTestTableUIdidsIf result 0Then Response.Write删除数据成功End If 当然你也可以用字符串或者数组指定其它的条件比如 resultdb.DeleteRecordTestTableUIdIsActive0 And FirstNameTom 另外你可以用下面的语句来查看这个函数生成的sql语句 Response.Writedb.wDeleteRecordTestTableUIdids 原型dbCtrl.ReadTableTableNameConditionGetFieldNames功能根据指定条件获取某条纪录中的其他字段的内容返回值StringGetFieldNames为单个字段or ArrayGetFieldNames为多个字段参数TableNameString表名称ConditionString or Array查询条件如果是数组应遵循前面的参数约定GetFieldNamesString单个字段名或者由逗号隔开的多个字段名举例Dim uidresult uidrspostid假设这里是页面上某个记录集中的用户id值resultdb.ReadTableUserTableUIduidUserNameResponse.Write发布者result 我不得不说在实际应用中这个函数可能是用得最多的你上面看到的就是一个非常常用的例子从一个值去获取另外一个表中某字段值等于该值的另外一个字段的值有点拗口不过确实就是这个意思。
下面的例子将告诉你如何根据这个值获得多个相应的值。
Dim uidresult uidrspostid假设这里是页面上某个记录集中的用户id值resultdb.ReadTableUserTableUIduidUserNameUserSexUserAgeResponse.Write发布者result0br/性别result1br/年龄result2 如你所见就这么简单输入多个字段名称得到的是一个数组。
原型dbCtrl.CobjRs功能关闭纪录集对象参数objRsObject页面上的某个记录集对象举例Dim rs Set rsdb.GetRecordDetailTestTableId123Your Code here.db.Crs 这个函数上面的许多例子都用了就不多解释了它等同于rs.closeset rsnothing。