带参数的sql语句查询语句

vb中使用带参数的SQl语句问题
在VB6里的一条数据库更新语句:
update Ass_UserPass set username='& & txtName & &',department='& & cboBm.Text & &',UsFunction='& & cboLb.Text & &',pword='& & strPassStor & &' where user_id='& & lblId & &'&
由于 strPassStor 是经加密运算得出,所以这种写法会有错误,因为产生的密码中会有特殊字符。
于是想用参数化查询的方式:
&Set Cmd = mand
& strSql = &update Ass_UserPass set username='& & txtName & &',department='& & cboBm.Text & &',UsFunction='& & cboLb.Text & &',pword=@Pword where user_id='& & lblId & &' &
& With Cmd
& .Prepared = False
& .CommandText = strSql
& .CommandType = adCmdText
& .NamedParameters = True
& .Parameters.Append .CreateParameter(&@Pword&, adVarChar, adParamInput, 32, strPassStor)
& Set .ActiveConnection = cnErp
& .Execute
& End With
结果提示变量&@Pword &未定义,试了好多次都不能解决参数化查询问题,网上也只有调用存储过程的例子。请问如何实现Sql语句中带参数的查询呢?谢谢!陈锦巍
或者你可以幫你的 SQL STATEMENT 轉成 STORED PROCEDURE 因為好像 CommandType = adCmdText 不能接受 SQL Parameter 的 要STORED PROCEDURE才可以
或者你可以POST 這個strPassStor 給我們參考看..應用可以怎樣直接方到SQL QUERY 使用
Please correct me if my concept is wrongChi
已建议为答案
已标记为答案
谢谢您的答复,现在找到解决方法了,就是查询语句的参数只能用&?&。陈锦巍
已标记为答案
或者你可以幫你的 SQL STATEMENT 轉成 STORED PROCEDURE 因為好像 CommandType = adCmdText 不能接受 SQL Parameter 的 要STORED PROCEDURE才可以
或者你可以POST 這個strPassStor 給我們參考看..應用可以怎樣直接方到SQL QUERY 使用
Please correct me if my concept is wrongChi
已建议为答案
已标记为答案
谢谢您的答复,现在找到解决方法了,就是查询语句的参数只能用&?&。陈锦巍
已标记为答案
谢谢您的答复,现在找到解决方法了,就是查询语句的参数只能用&?&。
我的印象中Access会这样,Sql server不会这样。
谢谢您的答复,现在找到解决方法了,就是查询语句的参数只能用&?&。
我的印象中Access会这样,Sql server不会这样。
大概是使用ado的原因吧,这里说的不是ado.net陈锦巍
Microsoft 正在进行一项网上调查,以了解您对 Msdn 网站的意见。如果您选择参加,我们将会在您离开 Msdn 网站时向您显示该网上调查。是否要参加?
<input type="hidden" id="hdnTrackerText" value="请不要关闭此窗口。谢谢!完成访问时,调查将显示在此处,所以请不要关闭此窗口。" />Cypher查询语言--Neo4j中的SQL
每天15篇文章
不仅获得谋生技能
更可以追随信仰
Cypher查询语言--Neo4j中的SQL
作者:shenshouer,发布于
“Cypher”是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询。Cypher还在继续发展和成熟,这也就意味着有可能会出现语法的变化。同时也意味着作为组件没有经历严格的性能测试。
Cypher设计的目的是一个人类查询语言,适合于开发者和在数据库上做点对点模式(ad-hoc)查询的专业操作人员(我认为这个很重要)。它的构念是基于英语单词和灵巧的图解。
Cyper通过一系列不同的方法和建立于确定的实践为表达查询而激发的。许多关键字如like和order by是受SQL的启发。模式匹配的表达式来自于SPARQL。正则表达式匹配实现实用Scala programming language语言。
Cypher是一个申明式的语言。对比命令式语言如Java和脚本语言如Gremlin和JRuby,它的焦点在于从图中如何找回(what to retrieve),而不是怎么去做。这使得在不对用户公布的实现细节里关心的是怎么优化查询。
这个查询语言包含以下几个明显的部分:
START:在图中的开始点,通过元素的ID或所以查找获得。
MATCH:图形的匹配模式,束缚于开始点。
WHERE:过滤条件。
RETURN:返回所需要的。
在下例中看三个关键字
示例图片如下:
如:这个有个查询,通过遍历图找到索引里一个叫John的朋友的朋友(不是他的直接朋友),返回John和找到的朋友的朋友。
START john=node:node_auto_index(name = 'John')
MATCH john-[:friend]-&()-[:friend]-&fof
RETURN john, fof
返回结果:
下一步添加过滤:
在下一个例子中,列出一组用户的id并遍历图查找这些用户接出friend关系线,返回有属性name并且其值是以S开始的用户。
START user=node(5,4,1,2,3)
MATCH user-[:friend]-&follower
WHERE follower.name =~ /S.*/
RETURN user, follower.name
返回结果:
Cypher中的操作符有三个不同种类:数学,相等和关系。
数学操作符有+,-,*,/和%。当然只有+对字符有作用。
等于操作符有=,&&,&,&,&=,&=。
因为Neo4j是一个模式少的图形数据库,Cypher有两个特殊的操作符?和!。
有些是用在属性上,有些事用于处理缺少值。对于一个不存在的属性做比较会导致错误。为替代与其他什么做比较时总是检查属性是否存在,在缺失属性时问号将使得比较总是返回true,感叹号使得比较总是返回false。
WHEREn.prop? = &foo&
这个断言在属性缺失情况下将评估为true。
WHEREn.prop! = &foo&
这个断言在属性缺失情况下将评估为false。
警告:在同一个比较中混合使用两个符号将导致不可预料的结果。
Cypher支持带参数的查询。这允许开发者不需要必须构建一个string的查询,并且使得Cypher的查询计划的缓存更容易。
参数可以在where子句,start子句的索引key或索引值,索引查询中作为节点/关系id的引用。
以下是几个在java中使用参数的示例:
节点id参数
Map&String, Object& params = new HashMap&String, Object&();
params.put( &id&, 0 );
ExecutionResult result = engine.execute( &start n=node({id}) return n.name&, params );
节点对象参数
Map&String, Object& params = new HashMap&String, Object&();
params.put( &node&, andreasNode );
ExecutionResult result = engine.execute( &start n=node({node}) return n.name&, params );
多节点id参数
Map&String, Object& params = new HashMap&String, Object&();
params.put( &id&, Arrays.asList( 0, 1, 2 ) );
ExecutionResult result = engine.execute( &start n=node({id}) return n.name&, params );
字符串参数
Map&String, Object& params = new HashMap&String, Object&();
params.put( &name&, &Johan& );
ExecutionResult result = engine.execute( &start n=node(0,1,2) where n.name = {name} return n&, params );
索引键值参数
Map&String, Object& params = new HashMap&String, Object&();
params.put( &key&, &name& );
params.put( &value&, &Michaela& );
ExecutionResult result = engine.execute( &start n=node:people({key} = {value}) return n&, params );
索引查询参数
Map&String, Object& params = new HashMap&String, Object&();
params.put( &query&, &name:Andreas& );
ExecutionResult result = engine.execute( &start n=node:people({query}) return n&, params );
SKIP 与LIMIT * 的数字参数
Map&String, Object& params = new HashMap&String, Object&();
params.put( &s&, 1 );
params.put( &l&, 1 );
ExecutionResult result = engine.execute( &start n=node(0,1,2) return n.name skip {s} limit {l}&, params );
正则表达式参数
Map&String, Object& params = new HashMap&String, Object&();
params.put( &regex&, &.*h.*& );
ExecutionResult result = engine.execute( &start n=node(0,1,2) where n.name =~ {regex} return n.name&, params );
当你参考部分的模式时,需要通过命名完成。定义的不同的命名部分就被称为标识符。
如下例中:
START n=node(1) MATCH n--&b RETURN b
标识符为n和b。
标识符可以是大写或小些,可以包含下划线。当需要其他字符时可以使用`符号。对于属性名的规则也是一样。
可以在查询语句中使用双斜杠来添加注解。如:
START n=node(1) RETURN b //这是行结束注释
START n=node(1) RETURN b
START n=node(1) WHERE n.property = &//这部是一个注释& RETURN b
每一个查询都是描述一个图案(模式),在这个图案(模式)中可以有多个限制点。一个限制点是为模式匹配的从开始点出发的一条关系或一个节点。可以通过id或索引查询绑定点。
通过id绑定点
通过node(*)函数绑定一个节点作为开始点
START n=node(1)
返回引用的节点。
通过id绑定关系
可以通过relationship()函数绑定一个关系作为开始点。也可以通过缩写rel()。
START r=relationship(0)
Id为0的关系将被返回
通过id绑定多个节点
选择多个节点可以通过逗号分开。
START n=node(1, 2, 3)
得到所有节点可以通过星号(*),同样对于关系也适用。
START n=node(*)
这个查询将返回图中所有节点。
通过索引查询获取节点
如果开始节点可以通过索引查询得到,可以如此来写:
node:index-name(key=”value”)。在此列子中存在一个节点索引叫nodes。
START n=node:nodes(name = &A&)
索引中命名为A的节点将被返回。
通过索引查询获取关系
如果开始点可以通过索引查询得到,可以如此做:
Relationship:index-name(key=”value”)。
START r=relationship:rels(property =&some_value&)
索引中属性名为”some_value”的关系将被返回。
多个开始点
有时需要绑定多个开始点。只需要列出并以逗号分隔开。
START a=node(1), b=node(2)
RETURN a,b
A和B两个节点都将被返回。
在一个查询的匹配(match)部分申明图形(模式)。模式的申明导致一个或多个以逗号隔开的路径(path)。
节点标识符可以使用或者不是用圆括号。使用圆括号与不使用圆括号完全对等,如:
MATCH(a)--&(b) 与 MATCH a--&b 匹配模式完全相同。
模式的所有部分都直接或者间接地绑定到开始点上。可选关系是一个可选描述模式的方法,但在真正图中可能没有匹配(节点可能没有或者没有此类关系时),将被估值为null。与SQL中的外联结类似,如果Cypher发现一个或者多个匹配,将会全部返回。如果没有匹配,Cypher将返回null。
如以下例子,b和p都是可选的病都可能包含null:
START a=node(1) MATCH p = a-[?]-&b
START a=node(1) MATCH p = a-[*?]-&b
START a=node(1) MATCH p = a-[?]-&x--&b
START a=node(1), x=node(100) MATCH p = shortestPath( a-[*?]-&x )
符号―意味着相关性,不需要关心方向和类型。
START n=node(3)
MATCH (n)--(x)
所有与A相关节点都被返回。
接出关系(Outgong relationship)
当对关系的方向感兴趣时,可以使用--&或&--符号,如:
START n=node(3)
MATCH (n)--&(x)
所有A的接出关系到达的节点将被返回.
定向关系和标识符
如果需要关系的标识符,为了过滤关系的属性或为了返回关系,可如下例使用标识符。
START n=node(3)
MATCH (n)-[r]-&()
所有从节点A接出的关系将被返回。
通过关系类型匹配
当已知关系类型并想通过关系类型匹配时,可以通过冒号详细描述。
START n=node(3)
MATCH (n)-[:BLOCKS]-&(x)
返回A接出关系类型为BLOCKS的节点。
通过关系类型匹配和使用标识符
如果既想获得关系又要通过已知的关系类型,那就都添加上,如:
START n=node(3)
MATCH (n)-[r:BLOCKS]-&()
所有从A接出的关系为BLOCKS的关系都被返回。
带有特殊字符的关系类型
有时候数据库中有非字母字符类型,或有空格在内时,使用单引号。
START n=node(3)
MATCH (n)-[r:`TYPE WITH SPACE IN IT`]-&()
返回类型有空格的关系。
关系可以通过使用在()―()多个语句来表达,或可以串在一起。如下:
START a=node(3)
MATCH (a)-[:KNOWS]-&(b)-[:KNOWS]-&(c)
RETURN a,b,c
路径中的三个节点。
可变长度的关系
可变数量的关系-&节点可以使用-[:TYPE*minHops..maxHops]-&。
START a=node(3), x=node(2, 4)
MATCH a-[:KNOWS*1..3]-&x
RETURN a,x
如果在1到3的关系中存在路径,将返回开始点和结束点。
在可变长度关系的关系标识符
当连接两个节点的长度是可变的不确定的时,可以使用一个关系标识符遍历所有关系。
START a=node(3), x=node(2, 4)
MATCH a-[r:KNOWS*1..3]-&x
如果在1到3的关系中存在路径,将返回开始点和结束点。
零长度路径
当使用可变长度路径,可能其路径长度为0,这也就是说两个标识符指向的为同一个节点。如果两点间的距离为0,可以确定这是同一个节点。
START a=node(3)
MATCH p1=a-[:KNOWS*0..1]-&b, p2=b-[:BLOCKS*0..1]-&c
RETURN a,b,c, length(p1), length(p2)
这个查询将返回四个路径,其中有些路径长度为0.
如果关系为可选的,可以使用问号表示。与SQL的外连接类似。如果关系存在,将被返回。如果不存在在其位置将以null代替。
START a=node(2)
MATCH a-[?]-&x
RETURN a,x
返回一个节点和一个null,因为这个节点没有关系。
可选类型和命名关系
通过一个正常的关系,可以决定哪个标识符可以进入,那些关系类型是需要的。
START a=node(3)
MATCH a-[r?:LOVES]-&()
RETURN a,r
返回一个节点和一个null,因为这个节点没有关系。
可选元素的属性
返回可选元素上的属性,null值将返回null。
START a=node(2)
MATCH a-[?]-&x
RETURN x, x.name
元素x在查询中为null,所有其属性name为null。
在Cypher中,可哟通过更多复杂模式来匹配,像一个钻石形状模式。
START a=node(3)
MATCH (a)-[:KNOWS]-&(b)-[:KNOWS]-&(c),(a)-[:BLOCKS]-(d)-[:KNOWS]-(c)
RETURN a,b,c,d
路径中的四个节点。
使用shortestPath函数可以找出一条两个节点间的最短路径,如下。
START d=node(1), e=node(2)
MATCH p = shortestPath( d-[*..15]-&e )
这意味着:找出两点间的一条最短路径,最大关系长度为15.圆括号内是一个简单的路径连接,开始节点,连接关系和结束节点。关系的字符描述像关系类型,最大数和方向在寻找最短路径中都将被用到。也可以标识路径为可选。
所有最但路径
找出两节点节点所有的最短路径。
START d=node(1), e=node(2)
MATCH p = allShortestPaths( d-[*..15]-&e )
这将在节点d与e中找到两条有方向的路径。
如果想在模式图上的路径进行过滤或者返回此路径,可以使用命名路径(named path)。
START a=node(3)
MATCH p = a--&b
开始节点的两个路径。
在绑定关系上的匹配
当模式中包含一个绑定关系时,此关系模式没有明确的方向,Cypher将尝试着切换连接节点的边匹配关系。
START a=node(3), b=node(2)
MATCH a-[?:KNOWS]-x-[?:KNOWS]-b
将返回两个连接节点,一次为开始节点,一次为结束节点。
更多课程...&&&
希望我们的资料可以帮助你学习,也欢迎投稿&提建议给我
频道编辑:winner
邮&&&&&&&件:winner@
&&京ICP备号&&京公海网安备号& & 我看到一般在VBA中写查询语句是这样的:Sql= &select sum(分数) from [sheet1$],表名$再加个[]
& & 而我现在要在不同的表里面做查询,自定义一个参数querysheet来表示这些表,通过输入文本控件来赋值。
& & 可是我写好执行了,这个sql语句既不报错,也不执行,所以我在想是不是sql语句写错了。
& & 求教各位大神。
& &sql = &SELECT * FROM& & [querysheet$] & &WHERE& & &日期=& & dateno Or &订单号=& & orderno
& &'querysheet是表示各个表名的一个参数,通过日期或者订单号来查询
& & PS:如果单凭这句话无法判断的话,要附件请告知小弟。
在线时间4838 小时经验7614 威望3 性别男最后登录注册时间阅读权限95UID290599积分7814帖子精华0分享0
积分排行105帖子精华0微积分0
本帖最后由 wj2368 于
19:08 编辑
sql = &SELECT * FROM& & [querysheet$] & &WHERE 日期= #& & dateno & &# Or 订单号=#& & orderno &&#&
在线时间78 小时经验136 威望0 性别保密最后登录注册时间阅读权限20UID1909350积分136帖子精华0分享0
EH初级, 积分 136, 距离下一级还需 214 积分
积分排行3000+帖子精华0微积分0
wj2368 发表于
sql = &SELECT * FROM& & [querysheet$] & &WHERE 日期= #& & dateno & &# Or 订单号=#& & orderno &&#&
谢谢,可是我按照你的语句执行了一遍,还是没有查询出结果,真的不知道是怎么回事了,求教。
19:10 上传
下载次数: 15
42.23 KB, 下载次数: 15
基础不牢,寸步难行啊
在线时间1508 小时经验2091 威望0 性别保密最后登录注册时间阅读权限70UID1391383积分2091帖子精华0分享0
EH铁杆, 积分 2091, 距离下一级还需 1109 积分
积分排行486帖子精华0微积分0
select * from tb where sdate='dateno' and id='orderno'
不过日期可以等于dateno吗,日期一般是这种格式:
谁知道你日期储存的格式是什么呢,也许是dateno
录入数据后请点击:数据\全部刷新 自行进行测试
开启该功能请点击:开始\程序\管理工具\数据源\确定
在线时间78 小时经验136 威望0 性别保密最后登录注册时间阅读权限20UID1909350积分136帖子精华0分享0
EH初级, 积分 136, 距离下一级还需 214 积分
积分排行3000+帖子精华0微积分0
amazeyeli 发表于
select * from tb where sdate='dateno' and id='orderno'
不过日期可以等于dateno吗,日期一般是这种格式 ...
不好意思,这个是我整个代码里面的一部分,这个dateno是日期的一个参数,我少说了。
在线时间4838 小时经验7614 威望3 性别男最后登录注册时间阅读权限95UID290599积分7814帖子精华0分享0
积分排行105帖子精华0微积分0
jjlbest 发表于
谢谢,可是我按照你的语句执行了一遍,还是没有查询出结果,真的不知道是怎么回事了,求教。
.................
19:39 上传
下载次数: 41
42.56 KB, 下载次数: 41
本帖评分记录鲜花
非常感谢你的帮助。
总评分:&鲜花 + 1&
在线时间1508 小时经验2091 威望0 性别保密最后登录注册时间阅读权限70UID1391383积分2091帖子精华0分享0
EH铁杆, 积分 2091, 距离下一级还需 1109 积分
积分排行486帖子精华0微积分0
看了下你的表,不建议再用Excel,可以使用Access了
在线时间78 小时经验136 威望0 性别保密最后登录注册时间阅读权限20UID1909350积分136帖子精华0分享0
EH初级, 积分 136, 距离下一级还需 214 积分
积分排行3000+帖子精华0微积分0
wj2368 发表于
.................
还是有些地方不太明白,主要是本来我写的区域,你帮我改掉了,是什么意思?还有,谢谢你,非常感谢。
在线时间78 小时经验136 威望0 性别保密最后登录注册时间阅读权限20UID1909350积分136帖子精华0分享0
EH初级, 积分 136, 距离下一级还需 214 积分
积分排行3000+帖子精华0微积分0
amazeyeli 发表于
看了下你的表,不建议再用Excel,可以使用Access了
理由呢?我觉得excel的应用相对于access还是要普遍一些,所以就还是用excel啦。
在线时间4838 小时经验7614 威望3 性别男最后登录注册时间阅读权限95UID290599积分7814帖子精华0分享0
积分排行105帖子精华0微积分0
jjlbest 发表于
还是有些地方不太明白,主要是本来我写的区域,你帮我改掉了,是什么意思?还有,谢谢你,非常感谢。
没有理解你的意思?
积分≥4700即可申请
金牌优秀会员
金牌优秀会员奖章No.1
优秀会员奖章No.1
- 注意:自起,未完成邮箱认证的会员将无法发帖!如何完成邮箱认证?请点击下方“查看”。
关注我们,与您相约微信公众平台!
Copyright 1999 - 2017 Excel Home. All Rights Reserved.本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!
Powered by
本站特聘法律顾问:徐怀玉律师 李志群律师 &&SQL带参数删除语句 - 已解决 - 搜狗问问
SQL带参数删除语句
我想用一个带参数的SQL删除语句,ids传递的参数值形式为(1,2,3,5),我试过以下两条语句都能执行string cmdText = "delete from News where ID in " +string cmdText = "delete from News where ID in (11,13)";但是下面这条语句怎么也不能执行,不知道错在哪里了?string cmdText = "delete from News where ID in @ID";SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@ID", ids) };报错:第 1 行: '@ID' 附近有语法错误。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 第 1 行: '@ID' 附近有语法错误。请问这个问题该怎么解决?
你用的什么语言 asp.net?new SqlParameter 你看看里面参数一个是参数名一个是类型,是用的存储过程吗?我通常是sqlcommand cmd = new sqlcommand();cmd.parameters.add(“@id”,sqldbtype.varchar).value=或者SqlParameter sp = new SqlParameter("@id",sqldbtype.varchar);sp.value='"";用法比较多,&感觉你用法有问题?&
确实是用法问题应该这么SqlParameter[] parm1 = {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& new SqlParameter("@BookId",SqlDbType.VarChar,10),&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& new SqlParameter("@CategoryId", SqlDbType.Int),&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& new SqlParameter("@IsHeadLine",SqlDbType.Bit),&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& new SqlParameter("@IsClassic",SqlDbType.Bit),&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& new SqlParameter("@BookName",SqlDbType.VarChar,80)};&&&&&&&&&&&&&&& parm1[0].Value = bbf.BookId;……………………………………………………………………………………………………………………………………
我确实用的asp.net,但是我的参数数组用法是可以那样用的,我其他的都是那样的用的,没有错,就是这个错了
我明白了 sql语句问题delete from News where ID in @ID 传过来的比如说是 1,2,5,6delete from news where id in 1,2,5,6就会出错少了()应该是delete from news where id in (1,2,5,6)
string cmdText = "delete from News where ID in (@ID)";这样试试,别把参数@id带括号 好像不能解析,你这样试试。
我试过你这样的,好像也不行,我以前是直接拼接的sql语句没有问题,现在变成参数的了,就有问题了
你直接用 string delStr = stirng.format("delete from news where id in ('{0}')","1,2,3");sqlcommand cmd= new sqlcommand(delstr,sqlconnection);这样试试,据说@id这样的用法能防注入,会不会把特殊字符过滤了括号什么的?
嗯,用参数法能防止一定的sql注入,既然换成string cmdText = "delete from News where ID in (@ID)";都不行应该不是括号的问题,我回去再试试你说的方法,谢谢你们,如果我解决了问题也一定会告诉那么怎么解决的?
你先把@ID传个1 ,别用1,2,3试试能行不&
嗯,我回去再试试,我似乎记得好像不行,这些我都试过了,只选择一个然后提交,还是和上面一样的报错
好,实在不行你在传参以后 打印出 commandtext 把commandtext复制到查询分析器里看看有没有问题
string cmdText = "delete from News where ID=@ID";
将 nvarchar 值 '(36,34)' 转换为数据类型为 int 的列时发生语法错误。报错!
只能是一个&如果是多个把@IDS的值设置为nvarchar string cmdText = "delete from News where ID in @IDS";
ids肯定是多个值,如(1,2,3,4,5,6);string cmdText = "delete from News where ID in @IDS";你的这句跟我写的一样的,SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@ID", ids) };这里面的ids是一个string类型的,值的形式:(1,2,3,4,5,6)
那你把那个数值类行的转化成一个string类型的啊!把那个数组转化成string
ids是一个string类型,值为(1,2,3,4,5,6)这样的形式
(1,2,3,4,5,6)这个是自动获取的吗
还是你自己拼接起来的啊?你怎么得到这些数啊?
是自动获取的,通过checkbox实现的让用户全选、反选、删除所选等功能。而且我也试着输出过ids的值,就是这样的(1,2,3,4,5,6)
把选中项的id用数组存起来会吗
?在用for循环拼接语句把数组转成string。因为是sql语句所以没有必要是什么类型的。
不是,我定义的ids就是一个string类型string ids="(";//遍历checkboxforeach(……){&&&& if(选中)& {&&& i&ds+=(int)this.lvNews.DataKey["ID"].value+",";&& }}ids=ids.substring(0,ids.length-1)+")";大概就是这样的子
反正我试着输出过ids的值,就是(1,2,3,4,5,6)这样的
这样写是对啊 是不是哪步写错了
你吧IDS显示出来是(1,2,3,4,5,6)吗?
嗯,我已经输出ids看过,就是选择项的id,形式:(1,2,3,4,5,6)
string cmdText = "delete from News where ID in " +在输出cmdText看看sql语句对不放到数据库中测试一下
string cmdText = "delete from News where ID in " +string cmdText = "delete from News where ID in (11,13)";这两种方法我都试过了,能执行,不用在数据库中,就是在asp.net页面中都能执行
现在解决了吧&& 就是忒麻烦
别忘了给分啊!!
其他回答(1)
首先应该给@ID加上括号(string cmdText = "delete from News where ID in (@ID)";),这样表面是没有语法错误了,但是程序会把ids整个作为字符串解析,然后在执行SQL时自动将ids整个转换为数字,仍然会报错(如果ids只包含一个序号则不会错),也就是说ids是一个整体,所以对于删除多条,可以通过逐条删除、拼接SQL、或者在存储过程中解析等几种方法
我的ids传递过来的值是这样的:(1,2,3,4)也就是包含了括号的
这样传递相当于delete from News where ID in ‘(1,2,3,4)’
多了两个单引号(1,2,3,4)会被解析为字符串
默认会加上单引号的
那该怎么解决呢?
像这种参数格式似乎只能通过拼接SQL语句的方式实现,就像你写的那样"delete from News where ID in " + ids
或者在存储过程里面解析,或者在存储过程里面通过解析字符串重新拼接SQL,写一个通用的过程}

我要回帖

更多关于 sql查询语句大全 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信