js已连接上sqlserver,怎么取表里的字段值存为数组?

不考虑安全问题,需求是这样的。代码如下:但是不能取得表里面的值,我在sql查询器里试过没问题,function dataconnect(sql){
// 创建数据库对象

var objdbConn = new ActiveXObject("ADODB.Connection");

// DSN字符串

var strdsn = "Driver={SQL Server};SERVER=192.168.0.107,1433;UID=sa;PWD=dv;DATABASE=db";

// 打开数据源

objdbConn.Open(strdsn);
// 执行SQL的数据库查询

//var objrs = objdbConn.Execute("SELECT * FROM njshq");

    var   sql="select 经度,纬度 from njshq where 测量 like '路%'";    
    var objrs = objdbConn.Execute(sql);
    // 获取字段数目   
    var fdCount = objrs.Fields.Count - 1;  
    // 检查是否有记录   
    if (!objrs.EOF){   
    // 显示数据库内容
    var sArray = new Array();   
    while (!objrs.EOF){   
   // document.write("<tr>");    
    // 显示每笔记录的字段  
    var b=""; 
    for (i=0; i <= fdCount; i++) {
     b =objrs.Fields(i).Value; 
     alert(b);     
    }
    objrs.moveNext(); // 移到下一个记录 
    sArray.push(b);  
    } 
     return sArray;
    }   
    else  
    objrs.Close(); // 关闭记录集合   
    objdbConn.Close(); // 关闭数据库链接   

}

2个回答

[code="javascript"]

var conn = new ActiveXObject("ADODB.Connection"); conn.Open("Provider=SQLOLEDB.1; Data Source=tgf; User ID=sa; " +"Password=sasa; Initial Catalog=MyBulletin"); var rs = new ActiveXObject("ADODB.Recordset"); var sql="select id,name from Category"; rs.open(sql, conn); alert(rs(0));//取出第一个来 rs.close(); rs = null; conn.close(); conn = null;

//连接ACCESS

var array=new Array();//声明数组 function conn(){ var db_bbs db_bbs="dd.mdb"//定义数据库 var conn = new ActiveXObject("ADODB.Connection"); conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+db_bbs+""); var rs = new ActiveXObject("ADODB.Recordset"); var sql="select name from authors"; //数据库中有authors表,name字段 rs.open(sql,conn); alert(rs(0))//取出第一个来 for(var i=0;i<rs.length;i++) { array.push(rs(i));//存入数组 } conn.close(); conn = null; }

[/code]

上面一种是通过索引来读取查询结果中的每一列
也可以通过 列名来读取数据
var arrays=new Array();
var Rs = new ActiveXObject("ADODB.Recordset");
var tempstr="";
Rs.Open("select result,id from Issue_3D where result='071'",ConnDB,1,3);
while(!Rs.EOF)
{
arrays.push(Rs("result"));
rrays.push(Rs("id"));
Rs.MoveNext;
}

iteye_5246
iteye_5246 存放2列,需要2个数组对吧。。。一个存放第一个列的数组,第二个存放第二列的数组对吧。
7 年多之前 回复
xiaolinziwlf
xiaolinziwlf 没有删除调试时,鼠标放到SqlArray长度为6,放到length上长度为9
7 年多之前 回复
xiaolinziwlf
xiaolinziwlf 删了之后, length长度为零了,for(var i=0;i<SqlArray.length-1;i++) { var lng = SqlArray[i]; var lat =SqlArray[i+1]; } 你qq号多少?
7 年多之前 回复
iteye_5246
iteye_5246 return arrays删了。
7 年多之前 回复
xiaolinziwlf
xiaolinziwlf if(!rs.EOF) { while(!rs.EOF) { arrays.push(rs("经度")); arrays.push(rs("纬度")); rs.MoveNext; return arrays; } } 现在就是用的你最初给我说的方法啊,经度、纬度为两列。
7 年多之前 回复
iteye_5246
iteye_5246 多列使用 f(!rs.EOF) { while(!rs.EOF) { arrays.push(rs("列1")); arrays.push(rs("列2")); rs.MoveNext; return arrays; } }
7 年多之前 回复
xiaolinziwlf
xiaolinziwlf 是的
7 年多之前 回复
iteye_5246
iteye_5246 是不是查询的多列?
7 年多之前 回复
xiaolinziwlf
xiaolinziwlf 这样i=1时,就弹出ADODB.Field: 对象不再有效。
7 年多之前 回复
xiaolinziwlf
xiaolinziwlf 取数据没问题吧,然后将循环改为: for(var i=0;i<SqlArray.length-1;i++) { var lng = SqlArray[i]; var lat =SqlArray[i+1]; }
7 年多之前 回复
iteye_5246
iteye_5246 var lng = SqlArray[i]; var lat =SqlArray[i+1]; //这行的原因 当i的索引 =SqlArray.length-1时。i+1已经超出范围了。
7 年多之前 回复
xiaolinziwlf
xiaolinziwlf var arrays=new Array(); 我已经放到外面了,刚忘记把函数里的删除了。
7 年多之前 回复
xiaolinziwlf
xiaolinziwlf function dataconnect(sql){ var objdbConn = new ActiveXObject("ADODB.Connection"); var strdsn = "Driver={SQL Server};SERVER=192.168.0.107,1433;UID=sa;PWD=dview;DATABASE=telecom"; objdbConn.Open(strdsn); var arrays=new Array(); var rs = new ActiveXObject("ADODB.Recordset"); rs.Open(sql,objdbConn); if(!rs.EOF) { while(!rs.EOF) { arrays.push(rs("经度")); arrays.push(rs("纬度")); rs.MoveNext; return arrays; } } else rs.Close(); objdbConn.Close(); // 关闭数据库链接 } return arrays;这一句应放在那个位置? 我现在放这个地方,然后另一函数调用取值: function findEach() { var sql = "SELECT 经度,纬度 FROM njshq"; var SqlArray=new Array(); SqlArray= dataconnect(sql) ; for(var i=0;i<SqlArray.length;i++)//SqlArray.length为4,数据库中经度、纬度各三条记录应该为6 { var lng = SqlArray[i]; var lat =SqlArray[i+1]; } } 执行到最后一条记录时,弹出ADODB.Field: 对象不再有效。请问是什么原因?谢谢!
7 年多之前 回复
xiaolinziwlf
xiaolinziwlf while(!rs.EOF) { arrays.push(rs("经度")); arrays.push(rs("纬度")); rs.MoveNext; } return arrays; 这个地方不就是根据列名获取值的吗?
7 年多之前 回复
iteye_5246
iteye_5246 我看错了,你就用根据列名获取值的 这个 var arrays=new Array(); 要放在function()外面作为全局变量。
7 年多之前 回复
iteye_5246
iteye_5246 哥们,用下面一段根据列名获取值的
7 年多之前 回复
xiaolinziwlf
xiaolinziwlf 按你说的方式将函数改为 function dataconnect(sql){ var objdbConn = new ActiveXObject("ADODB.Connection"); var strdsn = "Driver={SQL Server};SERVER=192.168.0.107,1433;UID=sa;PWD=dview;DATABASE=telecom"; objdbConn.Open(strdsn); var arrays=new Array(); var rs = new ActiveXObject("ADODB.Recordset"); rs.Open(sql,objdbConn); while(!rs.EOF) { arrays.push(rs("经度")); arrays.push(rs("纬度")); rs.MoveNext; } return arrays; objdbConn.Close(); // 关闭数据库链接 } 然后另一函数调用取值:function findEach() { var sql = "SELECT 经度,纬度 FROM njshq"; var SqlArray=new Array(); SqlArray= dataconnect(sql) ; for(var i=2;i<SqlArray.length;i++)//第一行为字段名称 { var lng = SqlArray[i][2];//数据库表中第二列为经度值 var lat =SqlArray[i][3];//数据库表中第三列为纬度值 } } 跟踪lng、lat的值提示undefined,请问程序那写得有问题?谢谢!
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问