注册 登录
编程论坛 VB.NET论坛

vb.net sql查询问题

shunlai 发布于 2016-03-13 15:30, 4486 次点击
我有个问题想了好久总是未能搞定,恳请大家指教,如下:
 New SqlCommand("select*from gykp where th  &' '& mz ='" & Trim(lnth) & "'", conn)
过去在ACCSEE数据库中运行以上没有问题,但是在数据库改成 SQL server后就出现了nvarchar和varchar在'&'运算符中不兼容的错误提示!我也试图按网上的如此修改,CAST(th AS nvarchar) &' '& CAST(mz AS nvarchar)。但运行还是同样错误!
注:th与 mz 是gykp表中的二个字段……。谢谢!
8 回复
#2
不说也罢2016-03-15 13:56

把“&”替换成“+”吧,同时注意空格
你改成下面的语句试试:
New SqlCommand("select * from gykp where [th]+' '+[mz] ='" & Trim(lnth) & "'", conn)
#3
shunlai2016-03-16 09:59
兄弟你好!首先非常感谢你的回复!我试了一下还是不行。尤其是当其中的一个字段为期间时,如:mz还会出现字符串转换时间格式错误!我改成cast(mz as datetime),也不成。烦人哪,谢谢!
#4
不说也罢2016-03-16 11:41
你的问题可能还需要描述得更仔细些。从你问题的查询语句分析,你是要实现[th]与[mz]两个字段的值中间加一个空格进行拼接后得到查询结果。
你是用ACCESS的,假设你的[mz]的字段是date格式,尝试用 format(cdate([mz]),'yyyymmdd')将日期格式转换为字符串。例如:
New SqlCommand("select * from gykp where [th]+' '+format([mz],'yyyymmdd') ='" & Trim(lnth) & "'", conn)

另外,你可以将Trim(lnth)模拟赋值么?我猜的结构是这样:New SqlCommand("select * from gykp where [th]+' '+format([mz],'yyyy-mm-dd') ='AA 2016-03-16'", conn),猜得对不?

[此贴子已经被作者于2016-3-16 11:50编辑过]

#5
shunlai2016-03-16 12:07
太谢谢你了!
我以前用的是access数据库,采用select*from gykp where th  &' '& mz ='" & Trim(lnth) & "'",查询没有问题!但现在我还用sql server后就出现了如上所述的错误。lnth的格式是例如:aaa   2016-3-16。你猜的很对!看来兄弟是高人!哈哈。
#6
shunlai2016-03-16 12:14
经试验错误提示:‘’format不是可识别的 内置函数名称‘’,哏~哈哈
#7
不说也罢2016-03-16 14:30
sqlserver数据库不支持format,可以用convert函数转换:
convert(varchar(100),[mz],20)
New SqlCommand("select * from gykp where [th]+' '+convert(varchar(10),[mz],20) ='" & Trim(lnth) & "'", conn)

convert函数,详细请找度娘,看看convert函数的用法

[此贴子已经被作者于2016-3-16 14:37编辑过]

#8
不说也罢2016-03-16 14:39
convert(varchar(10),[mz],20)   '需保证[mz]字段是datetime格式,否则输出结果会出错。
#9
shunlai2016-03-16 15:31
太谢谢你了!按你说的我修改了一下运行未中断,也无错误提示!但查询没结果,估计字段间空格或其它小问题。我再找找原因吧,再次像你表示感谢!
1