注册 登录
编程论坛 ASP技术论坛

[求助]广而不精的问题(值得看看)

gupiao175 发布于 2007-08-15 17:03, 1128 次点击
经常把以前用过的数据库连接代码直接套用,可是发现问题不少.虽然连接不是个复杂问题,但确实是个最基本的问题,一般人只要能连接数据库也不会去考虑它的连接机制,资源消费等问题,一般连接ACCESS有2种方法如下:

Set conn=Server.CreateObject("ADODB.Connection")
1.Conn.Open "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};DBQ=" & Server.MapPath(dbpath)
2.conn.Open "PROVIDER=Microsoft.jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath(dbpath)
但是时间久了,感觉用起来很怪,而执行SQL语句的方法很多:
比如:
RS.OPEN SQL,CONN,1,1/2/3或者SET RS=CONN.EXECUTE(SQL),同样是连接,有的时候用方法1连接数据库的时候,不能使用SET RS=CONN.EXECUTE(SQL)来执行SQL语句,执行提示语法错误,如果用连接方法2就一切正常,所以有的时候不得已必须把两个连接一起加在一个页面上:
<!--#include file="conn.asp"-->连接方法1,Set conn=Server.CreateObject("ADODB.Connection")
<!--#include file="connn.asp"-->连接方法2,Set conn2=Server.CreateObject("ADODB.Connection")
虽然这样使用上一样没问题,什么方面都可以应用上,可是感觉每次都要连接2种数据方式,感觉很奇怪!
因为我在实际使用上也从来没有把连接做为一个过程来掉用,也不使用关闭数据库的过程.因为这方面我不大懂,一直以来只知道普通的连接,如果做为过程来使用,就很容易出现错误提示,这里面到底有多少值得研究奥秘呢?

我相信一定有人遇到和我一样的困惑,虽然能解决很多复杂的问题,可是这个最基本的问题却没彻底搞懂,有点广而不精的感觉,很是遗憾,望高手给予解答!谢谢!


14 回复
#2
gupiao1752007-08-15 17:07
当然如果有谁对这个最基本的问题有兴趣也可以一起讨论!
#3
gupiao1752007-08-16 01:50

这么重要而且是最常用实际的问题怎么没人知道吗?郁闷!

#4
leaftest2007-08-16 08:08
哇..  楼主在线等到凌晨2点钟, 要帮顶的
#5
haxin2007-08-16 09:44
呵,一直做过来,没有怎么考虑这些,反正拿过来可以用就行了
#6
gupiao1752007-08-16 09:57
是啊,我以前也是不考虑这个问题的,只要能用就行,从来不想为什么?不会考虑消耗资源问题,更不会考虑把连接写为一个过程的事情,觉得能用就行,可是发现这样不是在学习而是在应付了事!所以特希望有熟悉这方面的人给点参考和建议!非常感谢!
#7
haxin2007-08-16 10:00
一起感谢ing   
#8
gupiao1752007-08-16 10:22
谢谢楼上的支持!
#9
hmhz2007-08-16 11:22
1.Conn.Open "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};DBQ=" & Server.MapPath(dbpath)
2.conn.Open "PROVIDER=Microsoft.jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath(dbpath)

考虑效率和程序兼容性问题,建议使用第二种

第一种是使用路径直接连接数据库的
第二种是使用数据库源连接数据库的

两种对比,数据源的速度肯定比直接连接数据要快

#10
gupiao1752007-08-16 13:17
谢谢楼上的参与回答,虽然问题是最基础的,但是却没人能深入理解和回答,难道大家都喜欢把时髦的技术语言挂在嘴边,却不知道最基础的东西!可悲呀!

数据库(不写过程直接连接)和(以过程形式)相比较,他们的优点和缺点,以及注意事项,难道真没有一个人知道???哎!
#11
qhscqb2007-08-16 13:39
用微软件的jet.oledb连接速度比较快;我认为conn.execut([sql])与rs.open [sql]的区别在于前者一般用于插入、更新或删除记录时用,这样会减少系统资源的占用,因为它不会将pagecount值返回,而且它还不需要创建rs对象,但后者就不同了,它的系统资源占用较多,但是能将RS对象的许多对象运用到显示判断、分页、更新等,最后还要关闭RS对象。
此为本人粗略愚见.
#12
qhscqb2007-08-16 13:41
以下是引用qhscqb在2007-8-16 13:39:46的发言:
用微软件的jet.oledb连接速度比较快;我认为conn.execut([sql])与rs.open [sql]的区别在于前者一般用于插入、更新或删除记录时用,这样会减少系统资源的占用,因为它不会将pagecount值返回,而且它还不需要创建rs对象,但后者就不同了,它的系统资源占用较多,但是能将RS对象的许多对象运用到显示判断、分页、更新等,最后还要关闭RS对象。
此为本人粗略愚见.

属性或方法

#13
gupiao1752007-08-16 15:24
谢谢楼上的发表观点!

不过OLEDB本人曾经遇到过一个问题,就是在新增加数据库记录的时候出问题了,问题提示语法错误,无论我用CONN.EXECUTE(SQL)还是RS.OPEN的形式都提示我的插入语法INSERT INTO有错误,而如果在同一个页面上再加入ODBC,然后再增加一个CONNENCTION变量CONN2,原来那个是CONN.然后执行CONN2.EXECUTE(SQL)或RS.OPEN形式就一切问题都没有,如果去掉ODBC数据库连接代码,就一样提示INSERT INTO语法有错,哎!难道是和资源消耗有关系吗(用新增的CONN2就不会提示语法错误)?在这之前的一切基于OLEDB的执行代码都可正常执行!实在是很郁闷!不知道有没有人遇到和我相类似的问题!谢谢!
#14
qhscqb2007-08-16 16:18
我也遇到过这样的情况,我反复检查查询语句,但看不出有什么错误,在无奈之下,我将要访问的数据库中的表导出到一个新表后,再操作新表居然成功了,我也不解是什么原因,但JET.OLDED效率挺高。我想这可能是一个小BUG吧。
#15
ayue2222007-08-16 16:58
conn.Open "PROVIDER=Microsoft.jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath(dbpath)
用这个连接数据库 rs.open sql.conn,1,1和set rs=conn.execute (sql) 都可以的撒 ...
1