<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wordpress外贸企业主题, Wp企业主题, wordpress企业主题, wordpress主题定制,  PHP代码, ASP代码, 精选JS代码, WORDPRESS, 网站SEO,Flash焦点广告,JS焦点广告,CSS技巧 &#124; 九创主题 &#187; asp数据库</title>
	<atom:link href="http://www.3code.cn/tag/aspdatabase-tag/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.3code.cn</link>
	<description>Wordpress外贸企业主题, Wp企业主题, wordpress企业主题, wordpress主题定制,  PHP代码,ASP代码,精选JS代码,WORDPRESS,网站SEO,Flash焦点广告,JS焦点广告,CSS技巧</description>
	<lastBuildDate>Sat, 11 Feb 2012 12:01:08 +0000</lastBuildDate>
	<language>zh-cn</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>ASP网站漏洞解析及黑客入侵防范方法(3)</title>
		<link>http://www.3code.cn/asp-hk-3/</link>
		<comments>http://www.3code.cn/asp-hk-3/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:26:12 +0000</pubDate>
		<dc:creator>寒林</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp安全]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1594</guid>
		<description><![CDATA[再提醒各位论坛站长一句，小心你们的文件上传：为什么论坛程序被攻破后主机也随之被攻击者占据。原因就在……对！ASP 木马！一个绝对可恶的东西。病毒么？非也.把个文件随便放到你论坛的程序中，您老找去吧。不吐血才怪哦。如何才能防止ASP木马被上传到服务器呢？方法很简单，如果你的论坛支持文件上传，请设定好你要上传的文件格式，我不赞成使用可更改的文件格式，直接从程序上锁定，只有图象文件格式，和压缩文件就完全可以，]]></description>
			<content:encoded><![CDATA[<p>8、ASP木马</p>
<p>  　　已经讲到这里了，再提醒各位论坛站长一句，小心你们的文件上传：为什么论坛程序被攻破后主机也随之被攻击者占据。原因就在……对！ASP 木马！一个绝对可恶的东西。病毒么？非也.把个文件随便放到你论坛的程序中，您老找去吧。不吐血才怪哦。如何才能防止ASP木马被上传到服务器呢？方法很简单，如果你的论坛支持文件上传，请设定好你要上传的文件格式，我不赞成使用可更改的文件格式，直接从程序上锁定，只有图象文件格式，和压缩文件就完全可以，多给自己留点方便也就多给攻击者留点方便。怎么判断格式，我这里收集了一个，也改出了一个，大家可以看一下：</p>
<p>  　　程序体（10）</p>
<p>  　　’判断文件类型是否合格<br />
  　　Private Function CheckFileExt (fileEXT)<br />
  　　dim Forumupload<br />
  　　Forumupload="gif,jpg,bmp,jpeg"<br />
  　　Forumupload=split(Forumupload,",")<br />
  　　for i=0 to ubound(Forumupload)<br />
  　　if lcase(fileEXT)=lcase(trim(Forumupload(i))) then<br />
  　　CheckFileExt=true<br />
  　　exit Function<br />
  　　else<br />
  　　CheckFileExt=false<br />
  　　end if<br />
  　　next<br />
  　　End Function<br />
  　　‘验证文件内容的合法性</p>
<p>  set MyFile = server.CreateObject ("Scripting.FileSystemObject")<br />
  　　set MyText = MyFile.OpenTextFile (sFile, 1) ’ 读取文本文件<br />
  　　sTextAll = lcase(MyText.ReadAll): MyText.close<br />
  　　’判断用户文件中的危险操作<br />
  　　sStr ="8　.getfolder　.createfolder　.deletefolder　.createdirectory　<br />
  　　.deletedirectory"<br />
  　　sStr = sStr &#038; "　.saveas　wscript.shell　script.encode"<br />
  　　sNoString = split(sStr,"　")<br />
  　　for i = 1 to sNoString(0)<br />
  　　if instr(sTextAll, sNoString(i)) ＜＞ 0 then<br />
  　　sFile = Upl.Path &#038; sFileSave: fs.DeleteFile sFile<br />
  　　Response.write "＜center＞＜br＞＜big＞"&#038; sFileSave &#038;"文件中含有与操作目录等有关的命令"&#038;_<br />
  　　"＜br＞＜font color=red＞"&#038; mid(sNoString(i),2) &#038;"＜/font＞，为了安全原因，＜b＞不能上传。＜b＞"&#038;_"＜/big＞＜/center＞＜/html＞"<br />
  　　Response.end<br />
  　　end if<br />
  　　next</p>
<p>  　　把他们加到你的上传程序里做一次验证，那么你的上传程序安全性将会大大提高.</p>
<p>  　　什么？你还不放心？拿出杀手锏，请你的虚拟主机服务商来帮忙吧。登陆到服务器，将PROG ID 中的"shell.application"项和"shell.application.1"项改名或删除。再将”WSCRIPT.SHELL”项和”WSCRIPT.SHELL.1”这两项都要改名或删除。呵呵，我可以大胆的说，国内可能近半以上的虚拟主机都没改过。只能庆幸你们的用户很合作，否则……我删，我删，我删删删……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-hk-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP网站漏洞解析及黑客入侵防范方法(2)</title>
		<link>http://www.3code.cn/asp-hk-2/</link>
		<comments>http://www.3code.cn/asp-hk-2/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:23:45 +0000</pubDate>
		<dc:creator>寒林</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[ASP函数]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1592</guid>
		<description><![CDATA[为你的数据库文件名称起个复杂的非常规的名字，并把它放在几层目录下。所谓 “非常规”，打个比方说，比如有个数据库要保存的是有关书籍的信息，可不要给它起个“book.mdb”的名字，而要起个怪怪的名称，比如d34ksfslf.mdb，并把它放在如./kdslf/i44/studi/的几层目录下，这样黑客要想通过猜的方式得到你的Access数据库文件就难上加难了。]]></description>
			<content:encoded><![CDATA[<p>6、数据库下载漏洞</p>
<p>  　　攻击原理：在用Access做后台数据库时，如果有人通过各种方法知道或者猜到了服务器的Access数据库的路径和数据库名称，那么他也能够下载这个Access数据库文件，这是非常危险的。</p>
<p>  　　防范技巧：</p>
<p>  　　（1）为你的数据库文件名称起个复杂的非常规的名字，并把它放在几层目录下。所谓 “非常规”，打个比方说，比如有个数据库要保存的是有关书籍的信息，可不要给它起个“book.mdb”的名字，而要起个怪怪的名称，比如d34ksfslf.mdb，并把它放在如./kdslf/i44/studi/的几层目录下，这样黑客要想通过猜的方式得到你的Access数据库文件就难上加难了。</p>
<p>  　　（2）不要把数据库名写在程序中。有些人喜欢把DSN写在程序中，比如：</p>
<p>  　　DBPath = Server.MapPath（“cmddb.mdb”）<br />
  　　conn.Open “driver={Microsoft Access Driver （*.mdb）}；dbq=” &#038; DBPath</p>
<p>  　　假如万一给人拿到了源程序，你的Access数据库的名字就一览无余了。因此建议你在ODBC里设置数据源，再在程序中这样写：</p>
<p>  　　conn.open“shujiyuan”</p>
<p>  　　（3）使用Access来为数据库文件编码及加密。首先在“工具→安全→加密/解密数据库”中选取数据库（如：employer.mdb），然后按确定，接着会出现“数据库加密后另存为”的窗口，可存为：“employer1.mdb”。</p>
<p>  　　要注意的是，以上的动作并不是对数据库设置密码，而只是对数据库文件加以编码，目的是为了防止他人使用别的工具来查看数据库文件的内容。</p>
<p>  　　接下来我们为数据库加密，首先打开经过编码了的 employer1.mdb，在打开时，选择“独占”方式。然后选取功能表的“工具→安全→设置数据库密码”，接着输入密码即可。这样即使他人得到了 employer1.mdb文件，没有密码他也是无法看到 employer1.mdb中的内容。</p>
<p>  　　7、防范远程注入攻击</p>
<p>  　　这类攻击在以前应该是比较常见的攻击方式,比如POST攻击,攻击者可以随便的改变要提交的数据值已达到攻击目的.又如:COOKIES 的伪造,这一点更值得引起程序编写者或站长的注意，不要使用COOKIES来做为用户验证的方式,否则你和把钥匙留给贼是同一个道理.</p>
<p>  　　比如:</p>
<p>  　　If trim(Request. cookies ("uname"))="fqy" and Request.cookies("upwd") =”fqy#e3i5.com” then<br />
  　　……..more………<br />
  　　End if</p>
<p>  　　我想各位站长或者是喜好写程序的朋友千万别出这类错误,真的是不可饶恕.伪造COOKIES 都多少年了，你还用这样的就不能怪别人跑你的密码.涉及到用户密码或者是用户登陆时,你最好使用session 它才是最安全的.如果要使用COOKIES就在你的COOKIES上多加一个信息,SessionID,它的随机值是64位的,要猜解它,不可能.例:</p>
<p>  　　if not (rs.BOF or rs.eof) then<br />
  　　login="true"<br />
  　　Session("username"&#038;sessionID) = Username<br />
  　　Session("password"&#038; sessionID) = Password<br />
  　　‘Response.cookies(“username”)= Username<br />
  　　‘Response.cookies(“Password”)= Password</p>
<p>  　　下面我们来谈谈如何防范远程注入攻击,一般的攻击都是将单表提交文件拖到本地,将Form ACTION=”chk.asp” 指向你服务器中处理数据的文件即可.如果你全部的数据过滤都在单表页上，那么恭喜你，你将已经被脚本攻击了.</p>
<p>  　　怎么才能制止这样的远程攻击?好办,请看代码如下: 程序体(9)</p>
<p>  　　＜%<br />
  　　server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))<br />
  　　server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))<br />
  　　if mid(server_v1,8,len(server_v2))＜＞server_v2 then<br />
  　　response.write "＜br＞＜br＞＜center>"<br />
  　　response.write " "<br />
  　　response.write "你提交的路径有误，禁止从站点外部提交数据请不要乱改参数！"<br />
  　　response.write "</p>
<p>  "<br />
  　　response.end<br />
  　　end if<br />
  　　%></p>
<p>  ‘个人感觉上面的代码过滤不是很好，有一些外部提交竟然还能堂堂正正的进来,于是再写一个.</p>
<p>  　　‘这个是过滤效果很好,建议使用.</p>
<p>  　　if instr(request.servervariables("http_referer"),"http://"&#038;request.servervariables("host") )<1 then response.write "处理 URL 时服务器上出错。</p>
<p>  　　如果您是在用任何手段攻击服务器，那你应该庆幸，你的所有操作已经被服务器记录，我们会第一时间通知公安局与国家安全部门来调查你的IP. "</p>
<p>  　　response.end<br />
  　　end if<br />
  　　程序体(9)</p>
<p>  　　本以为这样就万事大吉了，在表格页上加一些限制,比如maxlength啦,等等..但天公就是那么不作美,你越怕什么他越来什么.你别忘了,攻击者可以突破sql注入攻击时输入框长度的限制.写一个SOCKET程序改变HTTP_REFERER？我不会。网上发表了这样一篇文章：</p>
<p>  　　------------len.reg-----------------<br />
  　　Windows Registry Editor Version 5.00<br />
  　　[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\扩展(&#038;E)]<br />
  　　@="C:\Documents and Settings\Administrator\桌面\len.htm"<br />
  　　"contexts"=dword:00000004<br />
  　　-----------end----------------------<br />
  　　-----------len.htm------------------<br />
  　　<br />
  　　----------end-----------------------</p>
<p>  　　用法:先把len.reg导入注册表(注意文件路径)</p>
<p>  　　然后把len.htm拷到注册表中指定的地方.</p>
<p>  　　打开网页,光标放在要改变长度的输入框上点右键,看多了一个叫扩展的选项了吧</p>
<p>  　　单击搞定! 后记:同样的也就可以对付那些限制输入内容的脚本了.</p>
<p>  　　怎么办？我们的限制被饶过了，所有的努力都白费了？不，举起你de键盘，说不。让我们继续回到脚本字符的过滤吧，他们所进行的注入无非就是进行脚本攻击。我们把所有的精力全都用到ACTION以后的页面吧，在chk.asp页中，我们将非法的字符全部过滤掉，结果如何？我们只在前面虚晃一枪，叫他们去改注册表吧，当他们改完才会发现，他们所做的都是那么的徒劳。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-hk-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP调用数据库中视图及存储过</title>
		<link>http://www.3code.cn/asp-ado/</link>
		<comments>http://www.3code.cn/asp-ado/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:15:57 +0000</pubDate>
		<dc:creator>寒林</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1586</guid>
		<description><![CDATA[ASP提供内建对象，这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息。包括Application、 Request、Response、Server、Session 和ObjectContext 对象。其中最为常用的为Request、Response 和Server三个对象，它们分别用于从浏览器请求信息、向浏览器发送信息和访问服务器上对象的属性和方法。]]></description>
			<content:encoded><![CDATA[<p>一、前言</p>
<p>ASP (Active Server Pages) 是服务器端的脚本编写环境，它由微软公司的IIS3.0以上版本支持。它可用来创建动态 Web 页或生成功能强大的 Web应用程序。ASP页是包括 HTML 标记、文本和脚本命令的文件。ASP页可调用ActiveX组件来执行任务，例如连接到数据库或进行商务计算。通过ASP，可为您的Web页添加交互内容 或用HTML页构成整个Web应用程序，这些应用程序使用HTML页作为您的客户的界面。</p>
<p>二、ASP模型</p>
<p>浏览器从Web服务器上请求 .asp文件时，ASP 脚本开始运行。然后Web服务器调用ASP，ASP全面读取请求的文件，执行所有脚本命令，并将Web页传送给浏览器。</p>
<p>ASP提供了一个在HTML页中使用现有脚本语言如 Microsoft VBScript 和 Microsoft JScript 的框架。</p>
<p>ASP提供内建对象，这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息。包括Application、 Request、Response、Server、Session 和ObjectContext 对象。其中最为常用的为Request、Response 和Server三个对象，它们分别用于从浏览器请求信息、向浏览器发送信息和访问服务器上对象的属性和方法。</p>
<p>三、ADO</p>
<p>ASP和后台数据库连接使用微软的ADO(ActiveX Data Objects)，ADO是一项容易使用并且可扩展的将数据库访问添加到Web页的技术。可以使用ADO去编写紧凑简明的脚本以便连接到Open Database Connectivity(ODBC)兼容的数据库和 OLE DB兼容的数据源。</p>
<p>ADO包含7个内置对象，它们分别为Connection、Command、RecordSet、Fields、Error、Parameters和Properties。通过这些对象，ASP可以完成对后台数据库的所有操作。</p>
<p>四、ASP调用视图和存储过程</p>
<p>在一般的MIS应用中，会有大量的报表，此时我们可以在后台数据库编写相应的视图或存储过程，用ASP通过ADO调用以完成报表工作。下面用一个例子说明相应的操作过程。</p>
<p>1.创建 ODBC DSN 文件</p>
<p>在创建数据库脚本之前，必须提供一条使ADO定位、标识和与数据库通讯的途径。数据库驱动程序使用Data Source Name (DSN) 定位和标识特定的ODBC兼容数据库，将信息从 Web 应用程序传递给数据库。</p>
<p>2. 调用数据库视图</p>
<p>访问数据库信息的第一步是和数据库源建立连接。ADO提供Connection对象，可以使用该对象建立和管理应用程序和 ODBC数据库之间的连接。</p>
<p>&lt;%<br />
Set Dataconn = Server.CreateObject("ADODB.Connection") '建立连接对象<br />
Dataconn.Open "DSN=SinoTrans;SERVER=APP_SERVER;<br />
UID=sa;PWD=;APP=Microsoft (R) Developer Studio;WSID=APP_SERVER;Regional=Yes"<br />
Set cmdTemp = Server.CreateObject("ADODB.Command") '建立命令对象<br />
Set rst= Server.CreateObject("ADODB.Recordset") '建立记录集对象<br />
cmdTemp.CommandText = "Customers "<br />
cmdTemp.CommandType = 2<br />
Set cmdTemp.ActiveConnection = DataConn<br />
rst.Open cmdTemp, , 1, 3 '生成查询结果<br />
%&gt;</p>
<p>此时，Customers为视图，从视图中查询数据与从基表中查询数据的方法是相同的。</p>
<p>3.调用数据库存储过程</p>
<p>&lt;%<br />
Set Dataconn = Server.CreateObject("ADODB.Connection") '建立连接对象<br />
Dataconn.Open "DSN=SinoTrans;SERVER=APP_SERVER;UID=sa;<br />
PWD=;APP=Microsoft (R) Developer Studio;WSID=APP_SERVER;Regional=Yes"<br />
Set cmdTemp = Server.CreateObject("ADODB.Command") '建立命令对象<br />
Set rst = Server.CreateObject("ADODB.Recordset") '建立记录集对象<br />
cmdTemp.CommandText = "dbo.pd_test" '存储过程名称<br />
cmdTemp.CommandType = 4 '命令类别为4,表示为存储过程<br />
Set cmdTemp.ActiveConnection = Dataconn<br />
Set tmpParam = cmdTemp.CreateParameter("Return Value", 3, 4, 4)<br />
cmdTemp.Parameters.Append tmpParam<br />
Set tmpParam = cmdTemp.CreateParameter("@BeginDate", 135, 1, 16, riqi)<br />
'创建输入参数对象<br />
cmdTemp.Parameters.Append tmpParam<br />
rst.Open cmdTemp, , 1, 3    '生成查询结果<br />
%&gt;</p>
<p>这里调用的存储过程为pd_test，这种是ADO中提供的标准方法，但存在一个问题，就是当在存储过程中有两个以上的SELECT语句，但 从逻辑上又不可能同时执行的时候，ADO会提示你存储过程中SELECT语句太多，解决方法是直接用ADO的CONNECTION对象的EXECUTE方 法直接执行存储过程，如下：</p>
<p>&lt;%<br />
Set Dataconn = Server.CreateObject("ADODB.Connection") '建立连接对象<br />
Dataconn.Open "DSN=SinoTrans;SERVER=APP_SERVER;UID=sa;PWD=;<br />
APP=Microsoft (R) Developer Studio;WSID=APP_SERVER;Regional=Yes"<br />
ss = "EXECUTE dbo.pd_test " &amp; "'" &amp; riqi1 &amp; "'"<br />
Set rs = dataconn.Execute(ss)<br />
%&gt;</p>
<p>有关ASP和ADO使用的详细信息，请参阅 Microsoft ActiveX Data Objects (ADO) 和Active Server Pages（ASP）的详细参考。</p>
<p>五、结束语</p>
<p>在B/S结构的开发中，我们可以把一些商业规则或复杂查询用存储过程在DBMS中编写，然后用ASP中的ADO对象调用，完成原来C/S结构中的传统功能。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-ado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP使用MYSQL数据库全攻略</title>
		<link>http://www.3code.cn/asp-mysql/</link>
		<comments>http://www.3code.cn/asp-mysql/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:10:04 +0000</pubDate>
		<dc:creator>寒林</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[asp数据库]]></category>
		<category><![CDATA[PHP数据库操作]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1579</guid>
		<description><![CDATA[MYSQL数据库以它短小、方便、速度快、免费等优点成为很多网站目前首选数据库，但一般都是用PHP+MYSQL相结合来开发各种动态页面，其实ASP也可以使用MYSQL数据库开发动态页面，小弟我也是刚刚学会，不敢独享，所以特写了这篇文章供大伙参考。]]></description>
			<content:encoded><![CDATA[<p>MYSQL数据库以它短小、方便、速度快、免费等优点成为很多网站目前首选数据库，但一般都是用PHP+MYSQL相结合来开发各种动态页面，其实ASP也可以使用MYSQL数据库开发动态页面，小弟我也是刚刚学会，不敢独享，所以特写了这篇文章供大伙参考。</p>
<p>我的环境是WINDOWS98+PWS4.0+mysql-3.23.32-win+PHP4<br />
必要的软件：PWS4.0（呵呵，废话）<br />
mysql-3.23.32-win（这个是最新版的）<br />
myodbc-2.50.36-dll（这个是最重要的，MYSQL ODBC的驱动程序，可以到www.mysql.com下载）<br />
第一步：安装MYSQL ODBD的驱动程序，将下载的myodbd-2.50.46-dll文件复制到windows\system目录下(windows2000<br />
是winnt/system32)<br />
然后建立一新文件，扩展名为reg（就是注册表文件）,将以下内容复制到该文件中。<br />
REGEDIT4</p>
<p>[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\myodbc driver]<br />
"UsageCount"=dword:00000002<br />
"Driver"="C:\\WINDOWS\\System\\myodbc.dll"<br />
"Setup"="C:\\WINDOWS\\System\\myodbc.dll"<br />
"SQLLevel"="1"<br />
"FileUsage"="0"<br />
"DriverODBCVer"="02.50"<br />
"ConnectFunctions"="YYY"<br />
"APILevel"="1"<br />
"CpTimeout"="120"<br />
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]<br />
"myodbc driver"="installed"</p>
<p>保存后双击该文件，将上面代码注册到WINDOWS注册表中。<br />
如果安装在windows2000中,则Driver和Setup主键的值要做相应改变，这里我想就不用多说了。<br />
如果成功，在控制面板/ODBD数据源的驱动程序里将看到myodbd driver这一项！</p>
<p>第二步：建立ASP文件链接数据库。<br />
这里有两种方法，一种是在ODBC数据源中建立一个系统DSN。后来我发现不建立也可以在ASP中使用MYSQL,方<br />
法在下文将讲道。<br />
打开控制面板/ODBD数据源，选择系统DSN,然后添加一个新的DSN,驱动程序选择myodbd driver,会出现一个对<br />
话框供输入mysql<br />
相关信息。<br />
Windows DSN name: 所要建立DSN的名称<br />
Mysql Host (name or ip):Mysql服务器的名称或者是IP地址，通常填localhost<br />
Mysql database name:需要使用数据库的名称，数据库在Mysql管理程序中建立。这里我们使用一个例子。数<br />
据库名：hc188<br />
里面有数据表：user 数据表有两个字段分别是：username和password,随便插入几个<br />
数据。<br />
user:链接数据库的用户名，我填的是root超级用户<br />
password:链接数据库用户密码，如果没有，可以不填<br />
Port(if not 3306)：Mysql在服务器的端口，如果不填默认为3306<br />
SQL command on connect:使用sql命令链接数据库，这项可以不填<br />
填写完毕后选择OK保存。</p>
<p>下面链接数据库的ASP代码！</p>
<p>&lt;%<br />
strConnection = "dsn=hc188;driver={myodbd driver};server=localhost;uid=root;pwd=;database=hc188"<br />
Set adoDataConn = Server.CreateObject("ADODB.Connection")<br />
adoDataConn.Open strConnection</p>
<p>strQuery = "SELECT * FROM user"<br />
Set rs = adoDataConn.Execute(strQuery)<br />
If Not rs.BOF Then<br />
%&gt;<br />
&lt;TABLE&gt;<br />
&lt;TR&gt;<br />
&lt;TD&lt;b&gt;username&lt;/b&gt;&lt;/TD&gt;<br />
&lt;TD&gt;&lt;b&gt;password&lt;/b&gt;&lt;/TD&gt;<br />
&lt;/TR&gt;<br />
&lt;%<br />
Do While Not rs.EOF<br />
%&gt;<br />
&lt;TR&gt;<br />
&lt;TD&gt;&lt;%=rs("username")%&gt;&lt;/TD&gt;<br />
&lt;TD&gt;&lt;%=rs("password")%&gt;&lt;/TD&gt;<br />
&lt;/TR&gt;<br />
&lt;%<br />
rs.MoveNext<br />
Loop<br />
%&gt;<br />
&lt;/TABLE&gt;<br />
&lt;%<br />
Else<br />
Response.Write("Sorry, no data found.")<br />
End If</p>
<p>rs.Close<br />
adoDataConn.Close<br />
Set adoDataConn = Nothing<br />
Set rsEmailData = Nothing<br />
%&gt;</p>
<p>第二种方法：我在使用中想过如果不建立系统DSN，是否也可以使用MYSQL数据库呢？结果是可以的。<br />
方法很简单，把上面ASP代码第二行代码改为：<br />
strconnection="DefaultDir=;Driver={myodbc driver};database=hc188"</p>
<p>我奇怪的发现，这种方法连用户名和密码都不需要就可以使用。是不是MYSQL的一个BUG呢？</p>
<p>以上代码全部经测试通过！</p>
<p>到此，全文结束了，是不是很简单呢！希望能帮上你！</p>
<p>做人要厚道，请注明转自酷网动力(www.ASPCOOL.COM)。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>asp获得刚插入数据库的记录的ID号</title>
		<link>http://www.3code.cn/asp-id/</link>
		<comments>http://www.3code.cn/asp-id/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 02:33:44 +0000</pubDate>
		<dc:creator>寒林</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1333</guid>
		<description><![CDATA[对于SQL Server 2000来说，它提供了两个全新的函数(IDENT_CURRENT,SCOPE_IDENTITY),并且改进了@@IDENTITY的不足.当你插入新记录后，可以调用函数:
PRINT IDENT_CURRENT('table') '这将获得新的IDENTITY值，不管数据库中是不是有记录添加(这就避免了@@IDENTITY的连接限制)]]></description>
			<content:encoded><![CDATA[<p><strong>1.SQL Server</strong><br />
对于SQL Server 2000来说，它提供了两个全新的函数(IDENT_CURRENT,SCOPE_IDENTITY),并且改进了@@IDENTITY的不足.当你插入新记录后，可以调用函数:<br />
PRINT IDENT_CURRENT('table') '这将获得新的IDENTITY值，不管数据库中是不是有记录添加(这就避免了@@IDENTITY的连接限制)<br />
或者：PRINT SCOPE_IDENTITY() '这将获得在当前存储过程，触发器等其他程序创建的最新记录的IDENTITY值.<br />
而全局变量@@IDENTITY有一个问题，当对一张表执行insert时，如果该表有触发器程序在执行插入操作，然后，接着在另一张表中插入记录，这样返回@@IDENTITY值就是第二张表的IDENTITY值。</p>
<p>在ASP中你可以这样做:<br />
&lt;%<br />
set conn = Server.CreateObject("ADODB.Connection")<br />
conn.open "&lt;conn string&gt;"<br />
set rs = conn.execute("exec myProc @param1=" &amp; fakeValue)<br />
response.write "New ID was " &amp; rs(0)<br />
rs.close: set rs = nothing<br />
conn.close: set conn = nothing<br />
%&gt;</p>
<p><strong>2.Access</strong><br />
对于Access,你可以用下面这样的方法：<br />
&lt;%<br />
set conn = Server.CreateObject("ADODB.Connection")<br />
conn.open "&lt;conn string&gt;"<br />
conn.execute "Insert into someTable(intField) values(" &amp; fakeValue &amp; ")"<br />
set rs = conn.execute("select MAX(ID) from someTable")<br />
response.write "New ID was " &amp; rs(0)<br />
rs.close: set rs = nothing<br />
conn.close: set conn = nothing<br />
%&gt;<br />
然而对于多人同时向数据库中添加数据，我们就要利用记录集的adOpenKeyset游标来防止出错。例如下面的例子:<br />
&lt;%<br />
set conn = Server.CreateObject("ADODB.Connection")<br />
conn.open "&lt;conn string&gt;"<br />
set rs = Server.CreateObject("ADODB.Recordset")<br />
rs.open "select [intField] from someTable where 1=0", conn, 1, 3<br />
rs.AddNew<br />
rs("intField") = fakeValue<br />
rs.update<br />
response.write "New ID was " &amp; rs("id")<br />
rs.close: set rs = nothing<br />
conn.close: set conn = nothing<br />
%&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-id/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通用的获取文章上下各五篇文章的代码</title>
		<link>http://www.3code.cn/asp-news-5/</link>
		<comments>http://www.3code.cn/asp-news-5/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 02:26:06 +0000</pubDate>
		<dc:creator>寒林</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1327</guid>
		<description><![CDATA[通用的获取文章上下各五篇文章的代码，示例用的是asp教程，主要是了解SQL语句，其中id指当前文章的. ]]></description>
			<content:encoded><![CDATA[<p>通用的获取文章上下各五篇文章的代码，示例用的是asp教程，主要是了解SQL语句，其中id指当前文章的.</p>
<p><strong>上五篇 </strong></p>
<p>&lt;%<br />
"Sql=Select top 5 * From content Where id&gt;"&amp;id<br />
%&gt;</p>
<p><strong>下五篇 </strong></p>
<p>&lt;%<br />
"Sql=Select top 5 * From content Where id&lt;"&amp;id&amp;" order by id desc"<br />
%&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-news-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP操作数据库的类代码</title>
		<link>http://www.3code.cn/asp-database-lei/</link>
		<comments>http://www.3code.cn/asp-database-lei/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 10:16:50 +0000</pubDate>
		<dc:creator>寒林</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[ASP函数]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1297</guid>
		<description><![CDATA[对于ASP的使用者来说，在数据库操作上越简单，就有更多的时间去考虑逻辑上和应用上的代码，效率也会更高。今天俺在这里给大家提供一种数据库操作的思路，这些代码是俺在长期的ASP应用中不断完成和修正的，也已经用它完成了很多项目了，应该说直接拿去用是没有问题的。当然本人能力也有限，希望大家一起来讨论。]]></description>
			<content:encoded><![CDATA[<p>对于ASP的使用者来说，在数据库操作上越简单，就有更多的时间去考虑逻辑上和应用上的代码，效率也会更高。今天俺在这里给大家提供一种数据库操作的思路，这些代码是俺在长期的ASP应用中不断完成和修正的，也已经用它完成了很多项目了，应该说直接拿去用是没有问题的。当然本人能力也有限，希望大家一起来讨论。</p>
<p><strong>说明：此帖代码均是VBScript版本。另外最好你对手写ASP已经有一定的基础。</p>
<p>先简单介绍一下俺这个类的一些特点：</strong></p>
<p>1. 可同时操作多个不同类型的数据库。<br />
2. 完全不用考虑数据类型的差别，再也不用想字符型字段加不加单引号。<br />
3. 调用非常简单，对数据库的主要操作一般只需要一行代码。<br />
4. 支持mssql事务回滚。<br />
5. 可自动生成和输出sql语句方便调试。</p>
<p><strong>使用方法：</strong></p>
<p>1. 修改clsDbctrl.asp文件中的第1行为你自己的数据库位置(修改方法参考下面的CreatConn函数说明)。如需连接多个数据库可自行添加，格式相同。</p>
<p>2. 在你新建的asp文件中包含此asp文件。如：<br />
&lt;!--#include file="Inc/clsDbctrl.asp" --&gt; 或者：<br />
&lt;!--#include virtual="/Inc/clsDbctrl.asp"--&gt;</p>
<p>3.使用如下代码应用此类：</p>
<p><strong><br />
一个数据库连接：</strong></p>
<p>&lt;%<br />
OpenConn() '打开数据库连接<br />
Dim db : Set db = New DbCtrl '建立对象<br />
'Your Code Here......<br />
Co(db) : CloseConn() '释放对象，关闭数据库连接<br />
%&gt;</p>
<p>或者(一个或者多个数据库连接)：</p>
<p>&lt;%<br />
Dim db1 : Set db1 = New DbCtrl : db1.dbConn = Oc(a)<br />
Dim db2 : Set db2 = New DbCtrl : db2.dbConn = Oc(b)<br />
'Your Code Here......<br />
Co(db1) : Co(db2)<br />
%&gt;</p>
<p>4.具体操作的例子可以参考各函数说明内的代码示例。</p>
<p><strong>方法和属性概览（详细用法及例子在下面）</strong>：</p>
<p><strong>引用：</strong><br />
CreatConn 生成数据库连接字符串<br />
Oc 建立数据库连接<br />
Co 释放对象<br />
OpenConn 打开默认数据库连接<br />
CloseConn 关闭默认数据库连接<br />
dbCtrl.dbConn 属性，获取要操作的数据库连接，默认值为Conn<br />
dbCtrl.dbErr 属性，只读，输出捕获的错误信息<br />
dbCtrl.Version 属性，只读，程序版本信息<br />
dbCtrl.AutoId 方法，自动获取唯一序列号<br />
dbCtrl.GetRecord 方法，取得符合条件的纪录集<br />
dbCtrl.GetRecordBySql 方法，根据sql语句取得纪录集</p>
<p>dbCtrl.GetRecordDetail 方法，根据某一条指定纪录的详细数据<br />
dbCtrl.AddRecord 方法，添加一个新的纪录<br />
dbCtrl.UpdateRecord 方法，根据指定条件更新纪录<br />
dbCtrl.DeleteRecord 方法，删除符合条件的纪录<br />
dbCtrl.ReadTable 方法，根据指定条件获取某条纪录中的其他字段的内容<br />
dbCtrl.C 方法，关闭纪录集对象<br />
dbCtrl.wGetRecord,<br />
dbCtrl.wAddRecord,<br />
dbCtrl.wUpdateRecord,<br />
dbCtrl.wDeleteRecord 这4个方法是取得相应的操作(前面加w)的sql语句</p>
<p><strong>参数约定：</strong></p>
<p>由于ASP没有Arguments对象，不能使用动态参数，所以，在本类的代码中，使用了Array(数组)来达到这一效果。本类中的部分参数可以使用数组(参数说明中有注明)，但使用数组时应参照以下格式：</p>
<p>Array("Field1:Value1", "Field2:True", "Field3:100")</p>
<p>对，有点像json的格式，如果涉及到变量，那就这样：</p>
<p>Array("Field1:" &amp; Value1, "Field2:" &amp; Value2, "Field3:" &amp; Value3)</p>
<p>可以这样说，本类中的几乎所有与数据库字段相关的内容都可以用以上的数组格式来设置条件或者是获取内容。而这里最大的特点就是在使用时不用去考虑字段的类型，在字段后跟一个冒号，接着跟上相应的值就行了。如果你经常手写ASP程序的话，你很快就会感受到运用这种方式的魅力，除了数据类型不用考虑之外，它也很方便随时添加和删除条件。如果你还不明白怎么用的话没关系，下面有很多例子可以说明这个问题。</p>
<p>要把ASP的数据库操作封装起来其实并不难，相信大家以前自己也做过类似的代码或是借用过其他人的封装好的代码。但是就如各位知道的一样，使用封装后的代码一旦出错，排错是一个比较麻烦的事情，一般说来，封装后操作越简单的排错也越复杂。俺在写这些代码的时候已经尽我所能考虑到如果出错的话如何去排查错误，在尽可能简化用户操作数据库的代码的同时可以随时输出sql语句排查错误。</p>
<p>最后需要说明一点，本文所涉及的ASP数据库操作并不适合大型数据，如你所知，操作大型数据最好还是使用存储过程之类的东东比较好，以后俺会考虑把对存储过程的操作也封装进去。还有一个效率问题，要追求高效率的话，用ASP还是应该考虑COM+等，所以再次声明，本类适用的对象是中小型 ASP项目。</p>
<p><strong>好了，下面奉上详细使用说明：</strong></p>
<p><strong>一．数据库连接</strong></p>
<p>考虑到大多数人的使用习惯，在数据库连接上使用了公共过程，所以需要大家在代码里自行修改，如果你已经建立了数据库连接，把这几行注释掉就行了。代码中内置了MSSql,Access,MySQL,Oracle4种数据库的连接方式，当然你也可以自行在源代码中增加或删除。修改例如：</p>
<p>Dim a : a = CreatConn(0, "TestData", "localhost", "username", "userpassword")<br />
Dim b : b = CreatConn(1, "Data/%TestDb%.mdb", "", "", "")</p>
<p>说明一下，第1个参数可以是字符串。如果是使用Access，则第2个参数输入相对路径和绝对路径都是可以的，如有密码也可以在第5个参数中输入，如：</p>
<p>Dim c : c = CreatConn("ACCESS", "E:\MyWeb\Data\%TestDB%.mdb", "", "", "mdbpassword")</p>
<p><strong>相关函数：</strong></p>
<p>原 型：CreatConn(dbType, strDB, strServer, strUid, strPwd)<br />
功 能：建立数据库连接字符串<br />
返回值：String<br />
参 数：<br />
dbType : Integer or String 连接数据库类型<br />
(0 or "MSSQL") - Microsoft SQL Server<br />
(1 or "ACCESS") - Microsoft Office Access<br />
(2 or "MYSQL") - MySQL Server<br />
(3 or "ORACLE") - Oracle Server<br />
strDB : String 数据库名或数据库地址(Access使用绝对或者相对路径均可)<br />
strServer : String 数据库服务器地址,Access请留空</p>
<p>strUid : String 数据库用户名,Access请留空<br />
strPwd : String 数据库密码</p>
<p>原 型：Oc(connStr)<br />
功 能：打开数据库连接<br />
返回值：Object 数据库连接对象<br />
参 数：<br />
connStr : String 数据库连接字符串，由CreatConn函数生成</p>
<p>原 型：Co(obj)<br />
功 能：关闭对象<br />
参 数：<br />
obj : Object 要关闭的对象名称</p>
<p>原 型：OpenConn<br />
功 能：打开默认数据库连接，会自动建立一个名称为Conn的连接对象<br />
参 数：无</p>
<p>原 型：CloseConn<br />
功 能：关闭名称为Conn的默认数据库连接对象<br />
参 数：无</p>
<p><strong>二. 数据库操作</strong></p>
<p>下面就是本数据库操作类的函数功能说明，应该算是手册了，请多看例子的应用。</p>
<p>原 型：dbCtrl.dbConn(objConn)<br />
功 能：获取数据库连接对象<br />
参 数：<br />
objConn : Object 已经建立的数据库连接对象<br />
举 例：<br />
Dim db : Set db = New DbCtrl<br />
db.dbConn = Oc(CreatConn(1,"E:\WebSite\MySite\Data\%TestDb%.mdb","","",""))<br />
Co(db)</p>
<p>说 明：此属性为可选，如果不指定此属性则默认数据连接为页面上名称为Conn的数据库连接对象</p>
<p>原 型：dbCtrl.AutoID(TableName)<br />
功 能：自动获取唯一序列号（自动编号）<br />
返回值：Integer<br />
参 数：<br />
TableName : String 需要获得唯一序列号的数据表名<br />
举 例：<br />
Dim newId<br />
newId = db.AutoId("TestTable")<br />
Response.Write(newId)</p>
<p>原 型：dbCtrl.GetRecord(TableName,FieldsList,Condition,OrderField,ShowN)<br />
功 能：取得符合条件的纪录集<br />
返回值：Object 纪录集对象<br />
参 数：<br />
TableName : String 表名称<br />
FieldsList : String 字段名称，用逗号隔开，留空则为全部字段<br />
Condition : String or Array 查询条件，如果是数组应遵循前面的参数约定<br />
OrderField : String 排序方式<br />
ShowN : Integer 获取纪录的数量，相当于sql中的 Select Top N<br />
举 例：<br />
Dim rs<br />
Set rs = db.GetRecord("TestTable","fId,fName,fAge","fSex='男' And IsActive = 1","fName Asc", 0)<br />
While Not rs.eof<br />
Response.Write ("Name is:" &amp; rs(1) &amp; " Age is:" &amp; rs(2) &amp; "&lt;br /&gt;")<br />
rs.movenext()<br />
Wend<br />
db.C(rs)</p>
<p>对于以上的例子，用下面的数组方式指定条件是等价的：</p>
<p>Set rs = db.wGetRecord("TestTable","fId,fName,fAge", Array("fSex:男","IsActive:1"), "fName Asc", 0)</p>
<p>另外，你可以用下面的语句来查看这个函数生成的sql语句：</p>
<p>Response.Write(db.wGetRecord("TestTable","fId,fName,fAge", Array("fSex:男","IsActive:1"), "fName Asc", 0))</p>
<p>如你所见，只需要在原来的函数前加一个w即可。</p>
<p>原 型：dbCtrl.GetRecordBySQL(strSelect)<br />
功 能：根据sql语句取得纪录集<br />
返回值：Object 纪录集对象<br />
参 数：<br />
strSelect : String 用于生成记录集的SQL语句<br />
举 例：<br />
Dim rs<br />
Set rs = db.GetRecordBySQL("Select a.Id, a.LastName, b.Group From User a InnerJoin Depart b On a.GroupId = b.GroupId")<br />
'Your Code Here ...<br />
db.C(rs)</p>
<p>原 型：dbCtrl.GetRecordDetail(TableName, Condition)<br />
功 能：根据某一条指定纪录的详细数据<br />
返回值：Object 纪录集对象<br />
参 数：<br />
TableName : String 表名称<br />
Condition : String or Array 查询条件，如果是数组应遵循前面的参数约定<br />
举 例：<br />
Dim rs, Id<br />
Id = Request.QueryString("id")<br />
Set rs = db.GetRecordDetail("TestTable","Id=" &amp; id)<br />
'Your Code here...<br />
db.C(rs)</p>
<p>说 明：就像你已经看出来的一样，这个最常用在打开某个详细页面(比如新闻内容页面)</p>
<p>原 型：dbCtrl.AddRecord(TableName, ValueList)<br />
功 能：添加一个新的纪录<br />
返回值：新记录的Id号(成功) or 0 (失败)<br />
参 数：<br />
TableName : String 表名称<br />
ValueList : Array 插入表的字段和值，只能是数组且应遵循前面的参数约定<br />
举 例：<br />
Dim fName, fSex, fWorkYear, fBirth<br />
fName = "王二坛"<br />
fSex = "男"<br />
fWorkYear = 12<br />
fBirth = Cdate("1981-10-23")<br />
Dim result<br />
result = db.AddRecord("TestTable",Array("Name:"&amp;fName, "Sex:"&amp;fSex, "WorkYear:"&amp;fWorkYear, "Birthday:"&amp;fBirth, "IsActive:True"))<br />
If result&lt;&gt;0 Then<br />
Response.Write("添加记录成功！此记录的自动编号Id为" &amp; result)<br />
End If</p>
<p>看见了吧，真的不用考虑字段的类型是什么滴。<br />
如果你想要代码中的字段和值看得更清楚一点，也可以这样写，但凭卿之所好：</p>
<p>result = db.AddRecord("TestTable",Array("Name:" &amp; fName,_<br />
"Sex:" &amp; fSex,_<br />
"WorkYear:" &amp; fWorkYear,_<br />
"Birthday:" &amp; fBirth,_<br />
"IsActive:True"))</p>
<p>另外，你可以用下面的语句来查看这个函数生成的sql语句：</p>
<p>Response.Write(db.wAddRecord("TestTable",Array("Name:"&amp;fName, "Sex:"&amp;fSex, "WorkYear:"&amp;fWorkYear, "Birthday:"&amp;fBirth, "IsActive:True")))</p>
<p>说 明：返回的Id值用的是比较笨的方法，并不能保证在并发数据量大的时候的准确性，慎用。</p>
<p>原 型：dbCtrl.UpdateRecord(TableName, Condition, ValueList)<br />
功 能：根据指定条件更新纪录<br />
返回值：1 (成功) or 0 (失败)<br />
参 数：<br />
TableName : String 表名称<br />
Condition : String or Array 更新条件，如果是数组应遵循前面的参数约定<br />
ValueList : String or Array 更新的字段及值，如果是数组应遵循前面的参数约定<br />
举 例：<br />
Dim fName, fWorkYear<br />
fName = "王三坛"<br />
fWorkYear = 10<br />
Dim result<br />
result = db.UpdateRecord("TestTable", "UId = 1308", Array("Name:"&amp;fName, "WorkYear:"&amp;fWorkYear))<br />
If result&lt;&gt;0 Then<br />
Response.Write("更新数据成功！")<br />
End If</p>
<p>另外，你可以用下面的语句来查看这个函数生成的sql语句：</p>
<p>Response.Write(db.wUpdateRecord("TestTable", "UId = 1308", Array("Name:"&amp;fName, "WorkYear:"&amp;fWorkYear)))</p>
<p>原 型：dbCtrl.DeleteRecord(TableName,IDFieldName,IDValues)<br />
功 能：删除符合条件的纪录<br />
返回值：1 (成功) or 0 (失败)<br />
参 数：<br />
TableName : String 表名称<br />
IDFieldName : String 表的Id字段的名称<br />
IDValues : String or Array 删除条件，可以是由逗号隔开的多个Id号，如果是数组应遵循前面的参数约定<br />
举 例：<br />
Dim ids, result<br />
ids = Request.Form("selectid") '可以假设这里获取的值是 12, 34, 256, 314 (复选框提交的值都这样)<br />
result = db.DeleteRecord("TestTable", "UId", ids)<br />
If result&lt;&gt;0 Then<br />
Response.Write("删除数据成功！")<br />
End If</p>
<p>当然，你也可以用字符串或者数组指定其它的条件，比如：</p>
<p>result = db.DeleteRecord("TestTable", "UId", "IsActive = 0 And FirstName = 'Tom'")</p>
<p>另外，你可以用下面的语句来查看这个函数生成的sql语句：</p>
<p>Response.Write(db.wDeleteRecord("TestTable", "UId", ids))</p>
<p>原 型：dbCtrl.ReadTable(TableName, Condition, GetFieldNames)<br />
功 能：根据指定条件获取某条纪录中的其他字段的内容<br />
返回值：String (GetFieldNames为单个字段) or Array (GetFieldNames为多个字段)<br />
参 数：<br />
TableName : String 表名称<br />
Condition : String or Array 查询条件，如果是数组应遵循前面的参数约定<br />
GetFieldNames : String 单个字段名或者由逗号隔开的多个字段名<br />
举 例：<br />
Dim uid, result<br />
uid = rs("postid") '假设这里是页面上某个记录集中的用户id值<br />
result = db.ReadTable("UserTable","UId=" &amp; uid, "UserName")<br />
Response.Write("发布者：" &amp; result)</p>
<p>我不得不说，在实际应用中，这个函数可能是用得最多的，你上面看到的就是一个非常常用的例子，从一个值去获取另外一个表中某字段值等于该值的另外一个字段的值（有点拗口，不过确实就是这个意思）。下面的例子将告诉你如何根据这个值获得多个相应的值。</p>
<p>Dim uid, result<br />
uid = rs("postid") '假设这里是页面上某个记录集中的用户id值<br />
result = db.ReadTable("UserTable","UId=" &amp; uid, "UserName,UserSex,UserAge")<br />
Response.Write("发布者：" &amp; result(0) &amp; "&lt;br /&gt; 性别：" &amp; result(1) &amp; "&lt;br /&gt; 年龄：" &amp;result(2))</p>
<p>如你所见，就这么简单，输入多个字段名称得到的是一个数组。</p>
<p>原 型：dbCtrl.C(objRs)<br />
功 能：关闭纪录集对象<br />
参 数：<br />
objRs : Object 页面上的某个记录集对象<br />
举 例：<br />
Dim rs<br />
Set rs = db.GetRecordDetail("TestTable","Id=123" )<br />
'Your Code here...<br />
db.C(rs)</p>
<p>这个函数上面的许多例子都用了，就不多解释了，它等同于rs.close : set rs = nothing。</p>
<p>作者：coldstone 来源：经典论坛 document.body.oncopy = function () { setTimeout( function () { var text = clipboardData.getData("text"); if (text) { text = text + "\r\n本文来自：网页教学网(www.webjx.com)原文链接："+location.href; clipboardData.setData("text", text); } }, 100 ) }</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-database-lei/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP多关键词查询实例代码</title>
		<link>http://www.3code.cn/asp-keys-query/</link>
		<comments>http://www.3code.cn/asp-keys-query/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 10:11:53 +0000</pubDate>
		<dc:creator>寒林</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1293</guid>
		<description><![CDATA[web开发中经常遇到多关键词对单个字段查询，一般是通过动态数组来实现的。当然多个关键词的一般是用空格或,隔开，我这几假设多个关键词用空格隔开,关键字字符串为keyStr，具体代码为。]]></description>
			<content:encoded><![CDATA[<p>web开发中经常遇到多关键词对单个字段查询，一般是通过动态数组来实现的。当然多个关键词的一般是用空格或,隔开，我这几假设多个关键词用空格隔开,关键字字符串为keyStr，具体代码为。</p>
<p>程序代码：</p>
<p>'关键字的搜索<br />
str="select * from tableName where id&gt;4"<br />
if srhKey&lt;&gt;"" then<br />
keyArr=split(srhKey," ")<br />
j=UBound(keyArr)<br />
t=0<br />
dim keystrArr()<br />
for i=0 to j<br />
if keyArr(i)&lt;&gt;"" then<br />
redim preserve keystrArr(t)<br />
strfilter="(empZw like '%"&amp;keyArr(i)&amp;"%' or empDep like '%"&amp;keyArr(i)&amp;"%' or empGz like '%"<br />
strfilter=strfilter&amp;keyArr(i)&amp;"%' or empWy1 like '%"&amp;keyArr(i)&amp;"%' or empWy2 like '%"&amp;keyArr(i)<br />
strfilter=strfilter&amp;"%' or empYq like '%"&amp;keyArr(i)&amp;"%' or com_name like '%"&amp;keyArr(i)&amp;"%')"<br />
keystrArr(t)=strfilter<br />
t=t+1<br />
end if<br />
next<br />
keystr=join(keystrArr," and ")<br />
str=str&amp;" and "&amp;keystr<br />
end if</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-keys-query/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP备份SqlServer数据库实例</title>
		<link>http://www.3code.cn/asp-sqlserver/</link>
		<comments>http://www.3code.cn/asp-sqlserver/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 10:09:37 +0000</pubDate>
		<dc:creator>寒林</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1291</guid>
		<description><![CDATA[<form method="post" name=myform>
<%if action="restore" then%><INPUT TYPE="hidden" name="action" value="restore">准备恢复数据库。。。
<%elseif action="backup" then%><INPUT TYPE="hidden" name="action" value="backup">准备备份数据库。。。<%else%>
选择操作：]]></description>
			<content:encoded><![CDATA[<p>&lt;HTML&gt;<br />
&lt;HEAD&gt;<br />
&lt;TITLE&gt;数据库操作_酷码资源&lt;/TITLE&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;/HEAD&gt;</p>
<p>&lt;BODY&gt;<br />
&lt;form method="post" name=myform&gt;<br />
&lt;%if action="restore" then%&gt;&lt;INPUT TYPE="hidden" name="action" value="restore"&gt;准备恢复数据库。。。<br />
&lt;%elseif action="backup" then%&gt;&lt;INPUT TYPE="hidden" name="action" value="backup"&gt;准备备份数据库。。。&lt;%else%&gt;<br />
选择操作：<br />
&lt;INPUT TYPE="radio" name="action" id="act_backup" value="backup"&gt;&lt;label for=act_backup&gt;备份&lt;/label&gt;<br />
&lt;INPUT TYPE="radio" name="action" id="act_restore" value="restore"&gt;&lt;label for=act_restore&gt;恢复&lt;/label&gt;&lt;%end if%&gt;<br />
&lt;br&gt;数据库名：&lt;INPUT TYPE="text" name="databasename" value="50forum"&gt;<br />
&lt;br&gt;文件路径：&lt;INPUT TYPE="text" name="bak_file" value="50forum.bak"&gt;(备份或恢复的文件路径)&lt;br&gt;<br />
&lt;input type="submit" value="确定"&gt;<br />
&lt;/form&gt;<br />
&lt;%<br />
'SQL Server 数据库的备份与恢复!<br />
'http://www.dwww.cn<br />
dim sqlserver,sqlname,sqlpassword,sqlLoginTimeout,databasename,bak_file,act<br />
sqlserver = "localhost" 'sql服务器<br />
sqlname = "sa" '用户名<br />
sqlpassword = "sa" '密码<br />
sqlLoginTimeout = 15 '登陆超时<br />
databasename = trim(request("databasename"))<br />
bak_file = trim(request("bak_file"))<br />
bak_file = Server.MapPath("backup/"&amp;bak_file)<br />
act = lcase(request("action"))</p>
<p>if databasename = "" then<br />
response.write "input database name"<br />
else<br />
if act = "backup" then<br />
Set srv = Server.CreateObject("SQLDMO.SQLServer")<br />
srv.LoginTimeout = sqlLoginTimeout<br />
srv.Connect sqlserver,sqlname, sqlpassword<br />
Set bak = Server.CreateObject("SQLDMO.Backup")<br />
bak.Database = databasename<br />
bak.Devices = Files<br />
bak.Files = bak_file<br />
bak.Action = 0<br />
bak.Initialize = 1<br />
'bak.ReplaceDatabase = True<br />
bak.SQLBackup srv<br />
if err.number&gt;0 then<br />
response.write err.number&amp;"&lt;font color=red&gt;&lt;br&gt;"<br />
response.write err.description&amp;"&lt;/font&gt;"<br />
end if<br />
Response.write "&lt;font color=green&gt;备份成功!&lt;/font&gt;"<br />
srv.disconnect<br />
Set srv = nothing<br />
Set bak = nothing<br />
elseif act = "restore" then<br />
'恢复时要在没有使用数据库时进行！<br />
Set srv=Server.CreateObject("SQLDMO.SQLServer")<br />
srv.LoginTimeout = sqlLoginTimeout<br />
srv.Connect sqlserver,sqlname, sqlpassword<br />
Set rest = Server.CreateObject("SQLDMO.Restore")<br />
rest.Action = 0 ' full db restore<br />
rest.Database = databasename<br />
rest.Devices = Files<br />
rest.Files = bak_file<br />
rest.ReplaceDatabase = True 'Force restore over existing database<br />
if err.number&gt;0 then<br />
response.write err.number&amp;"&lt;font color=red&gt;&lt;br&gt;"<br />
response.write err.description&amp;"&lt;/font&gt;"<br />
end if<br />
rest.SQLRestore srv</p>
<p>Response.write "&lt;font color=green&gt;恢复成功!&lt;/font&gt;"<br />
srv.disconnect<br />
Set srv = nothing<br />
Set rest = nothing<br />
else<br />
Response.write "&lt;font color=red&gt;没有选择操作&lt;/font&gt;"<br />
end if<br />
end if<br />
%&gt;<br />
&lt;/BODY&gt;<br />
&lt;/HTML&gt;</p>
<p>来源：http://www.51windows.Net</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-sqlserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

