.Net命令参数传值In的问题

问题描述

我想用sql命令参数传值,不用字符串拼出来,那位仁兄,能帮我吗DataSetds=GetInfo("1,2,3,4")//类publicDataSetGetInfo(stringidStr){sql_Str="select*from[news]whereidin(@id)";SqlParameter[]Para1=newSqlParameter[1];Para1[0]=newSqlParameter("@id",SqlDbType.NVarChar,200);Para1[0].Value=idStr;returnSqlHelper.ExecuteDataset(My_config.GetConnstr,CommandType.Text,sql_Str,Para);}

解决方案

解决方案二:
我这样执行就会有错误
解决方案三:
1.我这样执行就会有错误=================这不废话吗?没错误,你分多,来散分啊?:D告诉我们,什么错误,详细的错误信息!!!2。sql_Str="select*from[news]whereidin(@id)";===========a.sql_Str声明了吗?b.据我了解,在sql2k版本中,对于IN运算,还是无法使用参数的c.只有拼sql语句d.sql_Str=String.Format("select*from[news]whereidin({0})",idStr);Hopehelpful!
解决方案四:
sql_Str忘了申明了,一大串代码精减掉,忘了加了.....
解决方案五:
对于in参数,应该只能用拼接字符串处理
解决方案六:
mark学习我说呢in老是出错原来是这个原因
解决方案七:
对IN参数只能用拼接字符串处理?mark下.
解决方案八:
对于in参数,只能用拼接字符串处理
解决方案九:
不过IN还是少用的好
解决方案十:
顶楼上的,少用in
解决方案十一:
用innerjoin吧,in用不到index。
解决方案十二:
貌似innerjoin和in没啥关系吧--!
解决方案十三:
用CharIndex
解决方案十四:
DataSetds=GetInfo("1,2,3,4")//类publicDataSetGetInfo(stringidStr){sql_Str="select*from[news]whereidin(@id)";SqlParameter[]Para1=newSqlParameter[1];Para1[0]=newSqlParameter("@id",SqlDbType.NVarChar,200);Para1[0].Value=idStr;returnSqlHelper.ExecuteDataset(My_config.GetConnstr,CommandType.Text,sql_Str,Para);}-----------------------------晕啊!!代码和数据库都混了!!!!!!!!!!!!!!!!!!!!!!!!SQL的部分写成存储过程吧!!这样好维护也容易懂效率又快
解决方案十五:
DataSetds=GetInfo("1,2,3,4")//类publicDataSetGetInfo(stringidStr){sql_Str="select*from[news]whereidin("+idStr+")"; returnSqlHelper.ExecuteDataset(My_config.GetConnstr,CommandType.Text,sql_Str,Para);}

解决方案:
jf
解决方案:
其实要执行的东西很简单就是一句.(ps,随手敲的,不排除手误)select*fromtbwhereidin(1,2,3,4)那么就成了语句的构造问题了in()里面是个集合,而楼主的写法是idin('1,2,4,3')是in一个字串.当然取不到了.stringsql="select*fromtbwhereidin(@ids)";相当于stringsql="select*fromtbwehreidin('1,2,3,4');如果一定要这样以传参数方式,并且ids给字串,那么stringsql="exec('select*fromtbwhereidin('+@ids+')')"SqlParameter[]Para1=newSqlParameter[1];Para1[0]=newSqlParameter("@id",SqlDbType.NVarChar,200);Para1[0].Value=idStr;returnSqlHelper.ExecuteDataset(My_config.GetConnstr,CommandType.Text,sql,Para1);

相当于执行exec('select*fromtbwhereidin('+'1,2,3,4'+')')

如果ids给字串,但不要求以传参数方式执行那么stringsql="select*fromtbwehreidin("+idStr+")";returnSqlHelper.ExecuteDataset(My_config.GetConnstr,CommandType.Text,sql,null);

相当于执行select*fromtbwhereidin(1,2,3,4)

如果一定要这样以传参数方式,且ids给字串,且不允许语句用exec来执行,那么stringsql="select*fromtbwherecharindex(','+rtrim(id)+',',','+@ids+',')>0";SqlParameter[]Para1=newSqlParameter[1];Para1[0]=newSqlParameter("@id",SqlDbType.NVarChar,200);Para1[0].Value=idStr;returnSqlHelper.ExecuteDataset(My_config.GetConnstr,CommandType.Text,sql,Para1);

相当于执行select*fromtbwherecharindex(','+rtrim(id)+',',','+'1,2,3,4'+',')>0

当然,charindex方式可以改用like完成.写法略
解决方案:
上面有朋友提到了用innerjoin那么这里用innerjoin的话,从效率上讲,没有什么效率上的好处stringsql="EXEC('SELECTa.*FROMtbaINNERJOIN(SELECTnid='+REPLACE(@ids,',','UNIONSELECT')+')xONx.nid=a.id')";SqlPara.....Para1[0].value=idStr;...

实际执行的是selecta.*fromtbainnerjoin(selectnid=1unionselect2unionselect3unionselect4)xona.id=x.nid

然而,上面cs代码,拼语句的做法是错的,因为EXEC执的内部不允许使用函数,这里用了replace将@ids的','换成了'unionselect'以生成行集.所以真要这么用的话,需要写两步stringsql="DECLARE@sqlVARCHAR(8000);SET@sql='SELECTa.*FROMtbaINNERJOIN(SELECTnid='+REPLACE(@ids,',','UNIONSELECT')+')xONx.nid=a.id';EXEC(@sql)";SqlPara...Para1[0].value=idStr;..

这样做,反而复杂了,效率也没提高.因为产生的常数行集也是没索引的.并不比in效率高.
解决方案:
对IN参数只能用拼接字符串处理?
解决方案:
我写的1,2,4都是拼字串的方式,虽然第一种是传@ids参数,但动态语句执行时还是拼参数.只有第三种不是,即charindex那种.charindex那种为什么要在前后加','呢,原因很简单tb有字段vv111523本意为:select*fromtbwherevin('11','2','5')如果直接用charindex(v,'11,2,5')>0那么v=1的记录也会被选出来加上','后则进行where过滤时实际将v临时用,1,,11,,5,,2,,3,来代表了那么,1,明显是不在,11,2,5,中的.这样就避免了错误的数据选取.
解决方案:
顶2楼
解决方案:
jf

时间: 2025-01-25 14:30:45

.Net命令参数传值In的问题的相关文章

linux系统下的df命令参数详解

  linux中df命令参数功能:检查文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 语法:df [选项] 说明:linux中df命令可显示所有文件系统对i节点和磁盘块的使用情况. 该命令各个选项的含义如下: -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统. -k 以k字节为单位显示. -i 显示i节点信息,而不是磁盘块. -t 显示各指定类型的文件系统的磁盘空间使用情况. -x 列出不是某一指定类型

linux中mount命令参数详解(nfs 参数)

1,命令格式mount命令的格式如下: mount [-t vfstype] [-o  options] device dir mount命令参数非常多,如下为与NFS相关的参数. (1)-a:把/etc/fstab中列出的路径全部挂载.(2)-t:需要mount的类型,如nfs等.(3)-r:将mount的路径定为read only.(4)-v mount:过程的每一个操作都有message传回到屏幕上.(5)rsize=n:在NFS服务器读取文件时NFS使用的字节数,默认值是1 024个字节

cmd-C++ 命令参数的复数判断

问题描述 C++ 命令参数的复数判断 在cmd中输入参数时,判断有没有输入重复的参数 比如: cmd : a.exe /L /L L命令出现两次,就报错,结束程序 解决方案 #include <stdio.h> int main(int argc, char* argv[]) { for (int i = 0; i < argc; i++) for (int j = 1; j < argc; j++) { if (i !== j && strcmp(argv[i],

[收藏学习]Ubuntu中apt-get命令参数简单说明

git命令的一些参数老是记不住,需要多看多记. 收藏一文如下: 常用的APT命令参数: apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明.大小.版本等 sudo apt-get install package 安装包     sudo apt-get install package - - reinstall 重新安装包 sudo apt-get -f install 修复安装"-f = --fix-missing&

Windows Mobile系统程序与控制面板命令参数

Windows Mobile的系统程序与控制面板的各项命令参数列表如下:WINDOWS目录下的程序(中英文对照表) backlight.exe 电源设置 btftpclient.exe 蓝牙资源管理器 bubblebreaker.exe 连球游戏 calc.exe 计算器 calender.exe 日历 camera.exe 相机 clearstorage.exe 恢复出厂设置 clock.exe 时钟 commManager.exe 通讯管理 commuRec.exe 通讯录 cprog.ex

action-struts2页面参数传值到Action中

问题描述 struts2页面参数传值到Action中 关于struts2 页面查询条件封装参数的问题,用单对象封装如User对象,页面中可以写${user.name}但如果查询条件中有User关联的对象的属性怎么办呢? struts2封装页面参数有两种方式,1直接在Action里写所有的参数属性,2最好用实体对象model封装参数信息,所以想用后者,但查询条件不能用一个对象封装完成,那咋办啊? 解决方案 你在User类里面新增属性啊 属性可以随便加的 比如你现在User只有name 和id属性

写批处理必备的一些命令参数使用技巧_DOS/BAT

 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件. 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令.当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的.批处理的程序

linux ftp命令参数全集

linux ftp命令参数是我们常用的服务器控制手段.那么我们现在就来介绍一些linux ftp命令参数.希望能帮助大家快速查阅,这些命令都是常用的,肯定会对您有所帮助.以下是linux ftp命令参数的详解. FTP> ! 从 ftp 子系统退出到外壳。 FTP> ? 显示 ftp 命令说明。? 和 help 相同。 格式:? [command] 说明:[command]指定需要帮助的命令名称。假如没有指定 command,linux ftp命令参数将显示全部命令的列表。 FTP> a

jasper-有关图片压缩的Jasper软件的命令参数应该怎么填

问题描述 有关图片压缩的Jasper软件的命令参数应该怎么填 我刚刚接触Jasper软件,想实现JPEG2000的图片压缩,可是程序运行起来总是有点问题,请问谁用过这个软件,能告诉我应该怎么填写命令参数么?