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

[求助]再问一个表达式的问题

scindy 发布于 2007-03-21 15:58, 1403 次点击

我用的是ACCESS数据库,库里面有三个表.结构如下:

dq表:(地区)
dqid 自动编号
dqname 文本类型

city表:(城市)
cityid 自动编号
dqid 数字类型
cityname 文本类型

product:表(商品)
productid 自动编号
cityid 文本类型

地区表里面的地区有东北地区,华北地区...,一个地区对应好几个城市
城市表里面有黑龙江,吉林,辽宁...

我的页面上有一个"东北地区"的链接,这个地区对应的是"黑龙江,吉林,辽宁" 这三个城市,点击它以后,转到另一个页面来显示所有这个地区的商品

我的查询语句如下:

Dim dq As String = Request.QueryString("dq").ToString() 获取地区的ID,这儿能获取,没有问题
strsql1 = "select cityid from city where dqid='" & dq & "'"
strsql = "select * from product where cityid in(strsql1)"

但是却出下面的问题:

至少一个参数没有被指定值。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: 至少一个参数没有被指定值。

源错误:


行 52: Dim adp As New OleDbDataAdapter(cmd)
行 53: Dim ds As New DataSet
行 54: adp.Fill(ds, "product")
行 55:
行 56: Dim ps As New PagedDataSource

源文件: G:\wwwroot\5168it\pdqlist.aspx.vb 行: 54


请问这是为什么啊??



31 回复
#2
冰镇柠檬汁儿2007-03-21 16:12
cmd你是怎么定义的?
#3
scindy2007-03-21 16:13
Dim cmd As New OleDbCommand(strsql, conn)

#4
chenjin1452007-03-21 16:20
strsql1 = "select cityid from city where dqid='" & dq & "'"
strsql = "select * from product where cityid in ( "+strsql1+")"
#5
冰镇柠檬汁儿2007-03-21 16:23
你把sql语句放到数据库里跑一下就知道是什么问题了,建议你最好学会自己发现问题。
你提的这些问都是你自己不细心再加上自己懒,才发现不了的

[此贴子已经被作者于2007-3-21 16:24:51编辑过]

#6
scindy2007-03-21 16:29
TO:chenjin145
那样也不行,我已经试了,错误如下:

语法错误 (操作符丢失) 在查询表达式 'cityid in( 'select cityid from city where dqid='1'')' 中。

TO:冰镇柠檬汁儿
我在数据库里面试了好几次了,提示"表达式不匹配"!也改了好几次了,都不行,我才来这里问的.

帮帮忙吧~~~


#7
chenjin1452007-03-21 16:33
cityid in( 'select cityid from city where dqid='1'')

加这么多单引号不错才怪
#8
scindy2007-03-21 16:38
这条语句select cityid from city where dqid='" & dq & "'在数据库里面查出来的cityid有三个值,分别是1,2,3

再执行这条就出错了,select * from product where cityid in( '" & strsql1 & "'),这条语句什么也查不着,只是一个空的表结构.

如果我执行这条语句:select * from product where cityid in( 1,2,3),就提示:"标准表达式中类型不匹配"




#9
chenjin1452007-03-21 16:39

你product 的cityid 难道不是int

#10
scindy2007-03-21 16:40
TO:chenjin145

那条语句是系统提示的错误信息,不是我写的.


#11
chenjin1452007-03-21 16:41
cityid 文本类型

改为数字

#12
棉花糖ONE2007-03-21 16:42
把strsql输出放到查询分析器执行一下看啥错误
#13
冰镇柠檬汁儿2007-03-21 16:44
以下是引用scindy在2007-3-21 16:29:37的发言:
TO:冰镇柠檬汁儿
我在数据库里面试了好几次了,提示"表达式不匹配"!也改了好几次了,都不行,我才来这里问的.

还说都不行,你的错误可有点低级了,类型不匹配,就改类型啊

#14
Kendy1234562007-03-21 16:44
语法错误 (操作符丢失) 在查询表达式 'cityid in( 'select cityid from city where dqid='1'')' 中。

你肯定没有正确试用4楼的方法!
'cityid in( 'select cityid from city where dqid='1'') 当然是出错了
cityid in( 'select cityid from city where dqid='1' 就不会有问题了
这段sql语句你写成2段做什么??

strsql = "select * from product where cityid in ( select cityid from city where dqid='" & dq & "')"
这样就不可能还会有错了

一句话 你根本没弄明白SQL语句中单引号的用法,意义
#15
scindy2007-03-21 16:46
我product 的cityid 是 文本类型的,

有什么问题吗?

我用的时候也是按文本类型用的~~~


#16
冰镇柠檬汁儿2007-03-21 16:46
select * from product where cityid in (select cityid from city where dqid='" & dq & "')
本来一句就能写好的,非要写两句

#17
冰镇柠檬汁儿2007-03-21 16:48
以下是引用scindy在2007-3-21 16:46:27的发言:
我product 的cityid 是 文本类型的,

有什么问题吗?

我用的时候也是按文本类型用的~~~


那你最好别问问题了,请问文本类型和整型是一样的类型吗???

#18
棉花糖ONE2007-03-21 16:52
'" & dq & "'这样写最容易出错了,还要考虑字符型和数字型,不对'符号做处理还容易被注入,写成参数化的不更好吗
#19
scindy2007-03-21 16:54
我类型也改了,也写成一条语句了,可还是出错啊???


标准表达式中数据类型不匹配。


愁死了~~~~


#20
棉花糖ONE2007-03-21 16:57

把语句输出放到查询分析器运行

#21
scindy2007-03-21 17:00
我试了,输出表达式为:select * from product where cityid in(select cityid from city where dqid='1')

我放到库里执行了一下,还是提示:标准表达式中数据类型不匹配。

我明明改了cityid的数据类型的~~



#22
冰镇柠檬汁儿2007-03-21 17:00
dqid是什么类型的?不是int型吗,你给的值为什么用“''”????
select * from product where cityid in (select cityid from city where dqid='" & dq & "')
#23
scindy2007-03-21 17:04
问题解决了,这条语句应该这样写:

select * from product where cityid in(select cityid from city where dqid=" & dq & ")

多了两个''号.

谢谢大家的帮助啊~~~

#24
棉花糖ONE2007-03-21 17:07

人家问你数字类型还是字符类型,你说字符类型,你那语句分明就是把dp当作数字类型来用

#25
Kendy1234562007-03-21 17:08

理论上如果是整数 字符型和整型之间应该会自动类型转换才对
难道Access没有这个功能么

#26
chenjin1452007-03-21 17:10
估计是

字段='数字'是会自动转化的, 但这里access看起来没这功能

字符 in (数字,数字)是会出错的
#27
scindy2007-03-21 17:10
我用的是access数据库,dqid是自动编号的.

我在获取值的时候,把它定义成了string的.




#28
冰镇柠檬汁儿2007-03-21 17:58
以下是引用scindy在2007-3-21 17:10:22的发言:
我用的是access数据库,dqid是自动编号的.

我在获取值的时候,把它定义成了string的.




以后要记住哦,自动编号都是INT型的

#29
scindy2007-03-22 09:27
哦,记住了,谢谢版主提醒了~~

对了,问一个事,你的头像是你本人吗?你是在北京上班呢吗?

我昨天在公交车上看见一个人,跟头像上长得太像了,还以为是你呢~~呵呵~~


#30
小恶魔2007-03-22 09:45
adp.Fill(ds,[这里带个空格]"product")

嘿嘿 不知道是对还是错!
#31
scindy2007-03-22 12:31

你看清楚了吗?我的问题已经解决了~~~

所以这里没有问题的`~~这里只是系统默认的格式而已~~~






#32
mingtian882007-03-22 13:17
程序里面一般都是STRING 带入SQL INT还是CHAR 只需要带上''.
1