页面怎么用node.js调用mdb数据库

页面怎么用node.js调用mdb数据库,第1张

1、跨进程通信

新版的nodejs里增加了对子进程的 *** 作,跨进程通信不是问题。

http://nodejs.org/docs/latest/api/all.html#child_Processes

复制代码 代码如下:

var util = require('util'),

exec = require('child_process').exec,

child

child = exec('cat *.js bad_file | wc -l',

function (error, stdout, stderr) {

console.log('stdout: ' + stdout)

console.log('stderr: ' + stderr)

if (error !== null) {

console.log('exec error: ' + error)

}

})

如例我们可以拿到控制台的输出内容stdout!

2、数据库访问相关ActiveX,ADODB.Connection

参考:http://msdn.microsoft.com/en-us/library/windows/desktop/aa746471%28v=vs.85%29.aspx

复制代码 代码如下:

var connection = new ActiveXObject("ADODB.Connection")

var result = 'ok'

try{

connection.Open("Provider=Microsoft.Jet.OLEDB.4.0Data Source=" + params.accessfile)

connection.Execute(params.sql)

} catch(ex){

result = ex.message

}

return {

result: result

}

connection.Open(connectionString),链接字符串参数可以设置访问sql server。

参考:http://www.connectionstrings.com/sql-server-2005

3、为方便维护,特别将cscript和nodejs的脚本合并,用typeof exports判断当前运行环境。

4、字符编码cscript代码使用ascii编码

非ascii码字符进行“\uHHHH”Unicode编码。

5、命令行字符需转义,双引号、百分号在命令行有特殊意义。

参数传递使用base64编码,避免冲突

cscript环境MSXML2.DOMDocument可以做base64编解码

复制代码 代码如下:

function base64Decode(base64){

var xmldom = new ActiveXObject("MSXML2.DOMDocument")

var adostream = new ActiveXObject("ADODB.Stream")

var temp = xmldom.createElement("temp")

temp.dataType = "bin.base64"

temp.text = base64

adostream.Charset = "utf-8"

adostream.Type = 1// 1=adTypeBinary 2=adTypeText

adostream.Open()

adostream.Write(temp.nodeTypedValue)

adostream.Position = 0

adostream.Type = 2// 1=adTypeBinary 2=adTypeText

var result = adostream.ReadText(-1)// -1=adReadAll

adostream.Close()

adostream = null

xmldom = null

return result

}

1.Access数据库名为 MyData.Mdb, 里面建了一个名为count的表,表由两个 字段组成: ID和COUNT,表里有一条数据: ('count','100')。

文本文件名为 count.txt,里面随便写入一个数字。

静态页面名为Cnt.htm。

2.以上3个文件都放在同一目录下。

由于采用Access数据库,而它采用非标准SQL语法,所以要注意在表名和字段名上需要加方括号: []

3.下面是页面里的代码:其中getCountFromDB方法是对Access数据库进行 *** 作,getCountFromTxt方法是对txt纯文本进行 *** 作,这两个方法都在本地执行通过。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE>New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="">

<META name="keywords" content="代码,字符串,数据库,文件,页面">

<META name="description" content="1、跨进程通信 新版的nodejs里增加了对子进程的 *** 作,跨进程通信不是问题。 http://nodejs.org/docs/latest/api/all.html#child_Processes 复制代码 代码如下:var util = ">

<SCRIPT LANGUAGE="JavaScript">

<!--

function getCountFromDB() {

//以当前页面文件为基础,找到文件所在的绝对路径。

var filePath = location.href.substring(0, location.href.indexOf("Cnt.htm"))

var path = filePath + "MyData.mdb"

//去掉字符串中最前面的"files://"这8个字符。

pathpath = path.substring(8)

var updateCnt = 0

//生成查询和更新用的sql语句。

var sqlSelCnt = "SELECT COUNT FROM [COUNT] WHERE ID = 'count'"

var sqlUpdCnt = "UPDATE [COUNT] SET [COUNT] = '"

//建立连接,并生成相关字符串 www.knowsky.com。

var con = new ActiveXObject("ADODB.Connection")

con.Provider = "Microsoft.Jet.OLEDB.4.0"

con.ConnectionString = "Data Source=" + path

con.open

var rs = new ActiveXObject("ADODB.Recordset")

rs.open(sqlSelCnt, con)

while (!rs.eof) {

var cnt = rs.Fields("COUNT")

document.write(cnt)

//将取得结果加1后更新数据库。

updateCnt = cnt * 1 + 1

rs.moveNext

}

rs.close()

rs = null

sqlUpdCntsqlUpdCnt = sqlUpdCnt + updateCnt + "'"

con.execute(sqlUpdCnt)

con.close()

con = null

}

function getCountFromTxt() {

var filePath = location.href.substring(0, location.href.indexOf("Cnt.htm"))

var path = filePath + "count.txt"

pathpath = path.substring(8)

var nextCnt = 0

var fso, f1, ts, s

//以只读方式打开文本文件。

var ForReading = 1

//以读写方式打开文本文件。

var ForWriting = 2

fso = new ActiveXObject("Scripting.FileSystemObject")

f1 = fso.GetFile(path)

ts = f1.OpenAsTextStream(ForReading, true)

s = ts.ReadLine()

nextCnt = eval(s) + 1

document.write("now count is :" + s)

ts.Close()

ts = f1.OpenAsTextStream(ForWriting, true)

ts.WriteLine(nextCnt)

ts.close()

}

//-->

</SCRIPT>

</HEAD>

<BODY>

<SCRIPT LANGUAGE="JavaScript">

<!--

getCountFromTxt()

//-->

</SCRIPT>

</BODY>

</HTML>

4.用这种方法来读写数据库,只适合做计数器和留言版这样的不需要保密性的工作,毕竟代码全是用javascript写成的,谁都可以看到,然后就可以得到路径把db文件下载下来进行分析,所以没办法用它来保存一些不想让别人知道的东西。

第一步定义连接字符串

var MM_conn_STRING = "Provider=Microsoft.Jet.OLEDB.4.0Data Source=F:\\cs\\benlen\\gbmdb.mdbPersist Security Info=False"

第二步创建adodb对象

var con = Server.CreateObject("ADODB.Connection")con.ActiveConnection = MM_conn_STRINGcon.Open()

这下 就连接好了数据库。

第三步创建记录集

var rs = Server.CreateObject("ADODB.Recordset")rs.ActiveConnection = MM_conn_STRINGrs.Source = "SELECT * FROM admin"rs.CursorType = 0rs.CursorLocation = 2rs.LockType = 1rs.Open()var rs_numRows = 0

这样我们数据库连接就完成了

以下是示例代码:

<script type="text/javascript" language="javascript" charset="gb2312">

<!--

function getCountFromDB() {

//以当前页面文件为基础,找到文件所在的绝对路径。

var filePath = location.href.substring(0, location.href.indexOf("index.html"))

var path = filePath + "MyData.mdb"

//去掉字符串中最前面的"files://"这8个字符。

path = path.substring(8)

var updateCnt = 0

//生成查询和更新用的sql语句。

var sqlSelCnt = "SELECT * FROM [user]"

//建立连接,并生成相关字符串。

var con = new ActiveXObject("ADODB.Connection")

con.Provider = "Microsoft.Jet.OLEDB.4.0"

con.ConnectionString = "Data Source=" + path

con.open

var rs = new ActiveXObject("ADODB.Recordset")

rs.open (sqlSelCnt,con)

while (!rs.eof) {

var cnt = rs.Fields("content")

document.write (cnt)

rs.moveNext

}

rs.close()

rs = null

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10838141.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存