前台页面使用jquery,后台是vb.net,数据库用access,sql语句没问题,在access中测试能都得到结果,但是同样语句通过服务器端访问access数据库,得到的结果是0条。
服务器端:
sql = "select * from 工程设计表 where 节点id like '" & Request.Form("id") & "*' and 隶属工程id='" & Request.Form("projectid") & "' order by 节点id"
cn = New OleDbConnection(cnStr)
da = New OleDbDataAdapter(sql, cn)
ds = New DataSet
str = ""
da.Fill(ds, "工程设计表")
If ds.Tables(0).Rows.Count > 0 Then
str = ds.Tables(0).Rows.Count
For Each dr As DataRow In ds.Tables(0).Rows
str = str & "|" & dr(0) & "|" & dr(1) & "|" & dr(2) & "|" & dr(3) & "|" & dr(4) & "|" & dr(5) & "|" & dr(6) & "|" & dr(7) & "|" & dr(8) & "|" & dr(9) & "|" & dr(10) & "|" & dr(11) & "|" & dr(12) & "|" & dr(13) & "|" & dr(14) & "|" & dr(15)
Next
Response.Write(str)
Else
Response.Write(sql)
End If
网页代码:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="formdesign.aspx.vb" Inherits="formdesign" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<script type="text/javascript" src="jquery-2.1.3.js"></script>
<body>
<form id="form1" runat="server">
<input type="text" id="test">
<input type="button" id="btn1" value="submit1" class="submit"/><input type="button" id="btn2" value="submit2" class="submit"/>
<script type="text/javascript" src="jquery-2.1.3.js"></script>
<script type="text/javascript">
$("#form1").on("click","#btn1", function (event) {
alert("op")
var operation = "fd2";
var id = "a_1_1";
var projectid = "1"
$.ajax({
method: "POST",
async: false, //同步
url: "asprespond.aspx",
data: { operation: operation, projectid: projectid, id:id },
success: function (data, status) {
alert(data)
$("#test").val(data.split("|")[0])
},
error: function(){
alert("d")
}
})
})
</script>
</form>
</body>
</html>
取不到数据,返回的sql语句如下:
select * from 工程设计表 where 节点id like 'a_1_1*' and 隶属工程id='1' order by 节点id
把这段命令放在access中就没有问题,可以取到结果,
我直接把“select * from 工程设计表 where 节点id like 'a_1_1*' and 隶属工程id='1' order by 节点id”放在服务器端,同样得不到结果,但是如果改成“select * from 工程设计表 where 隶属工程id='1' order by 节点id”这样,那就能取到结果。
完全没有思路,谁知道为什么会这样?不是sql问题,不是access问题,不是服务器端与access连接问题。
------解决思路----------------------
你SQL语句问题,你使用模糊查询,需要使用通配符%
select * from 工程设计表 where 节点id like '%a_1_1*%' and 隶属工程id='1' order by 节点id
------解决思路----------------------
Access可以设置 SQL89 或者 SQL92 语法模式。其实这个不兼容性造成了麻烦。
------解决思路----------------------
其实这并不是什么“vb.net有一种转换机制”,如果真的有转换机制那么它就不会只让你用一种语法、而不能用另外一种语法了。这是因为使用了最近的驱动或者你的本地系统的配置被最新的access版本修改过了。实际上这是不兼容性的表现(真正的兼容性,应该是允许新旧两种通配符同时使用)。