SQL in() 和base.Dispose(disposing)的问题求助。。。

问题描述

publicDataSetget_doc(stringcuid,intdoctype){SqlParameter[]pars={MakeInParam("@cuid",SqlDbType.NVarChar,200,cuid),MakeInParam("@doctype",SqlDbType.TinyInt,4,doctype),};returnRunProc("selecta.*,b.flow_name,c.node_name,c.node_type_id,c.node_order_id,c.node_next_idfromt_doca,t_flowb,t_nodecwherea.df=0anda.cuin(@cuid)anda.stin(0,1,4)anda.doc_type=@doctypeanda.flow_id*=b.flow_idanda.node_id*=c.node_idorderbya.doc_iddesc",pars,"t_doc123");}

publicDataSetRunProc(stringprocN,SqlParameter[]prams,stringtbN){SqlDataAdapterdap=CreateDataAdaper(procN,prams);DataSetds=newDataSet();dap.Fill(ds,tbN);this.Close();returnds;}

privateSqlDataAdapterCreateDataAdaper(stringprocN,SqlParameter[]prams){this.Open();SqlDataAdapterdap=newSqlDataAdapter(procN,con);dap.SelectCommand.CommandType=CommandType.Text;if(prams!=null){foreach(SqlParameterparameterinprams)dap.SelectCommand.Parameters.Add(parameter);}dap.SelectCommand.Parameters.Add(newSqlParameter("ReturnValue",SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null));returndap;}

问题出在这个语句:selecta.*,b.flow_name,c.node_name,c.node_type_id,c.node_order_id,c.node_next_idfromt_doca,t_flowb,t_nodecwherea.df=0anda.cuin(@cuid)anda.stin(0,1,4)anda.doc_type=@doctypeanda.flow_id*=b.flow_idanda.node_id*=c.node_idorderbya.doc_iddesc的in(@cuid)程序会跳到:protectedoverridevoidDispose(booldisposing){if(disposing&&(components!=null)){components.Dispose();}base.Dispose(disposing);}

如果不传参数,直接in(1,2,3,4)这样。程序就没问题了。请问有为什么和怎么解决呢?

解决方案

解决方案二:
不要把"1,2,3,4"作为一个参数,这明明应该是4个参数
解决方案三:
你需要理解什么是参数化查询,为什么要传参数不要把它想象成传递了参数之后还是直接在数据库里拼接字符串那么简单如果真是那样,参数化查询就没有任何存在的意义了,自己程序里直接拼接不一样吗
解决方案四:
每个参数只能是一个字段值,而逗号是语法,你把逗号放进参数里,整个语法都出错了,当然是无法执行成功的参数里真的能放语法的话,那么参数化查询也根本解决不了SQL注入的问题了正是因为参数就是参数,里面没有语法,才能解决SQL注入的问题
解决方案五:
引用2楼Z65443344的回复:

你需要理解什么是参数化查询,为什么要传参数不要把它想象成传递了参数之后还是直接在数据库里拼接字符串那么简单如果真是那样,参数化查询就没有任何存在的意义了,自己程序里直接拼接不一样吗

程序里写可以,只是方法都写好了。stringcuid="1,2,3,4";再把cuid作为参数发过去不行吗?in()里面放的是什么类型呢?
解决方案六:
in(,,,)这是个语法,每个用逗号隔开的,都是字段值,而逗号本身是语法的一部分好比select*from表你不能把select作为参数传入
解决方案七:
in就是规定了查询条件,字段值必须等于括号里传入的所有字段值的其中一个跟写一堆or是一个效果你不能把or作为参数传入
解决方案八:
十分怀疑你的a.cu在数据库里的类型应该是int,不然就算传了字符串最多就得不到结果,不会出错的。
解决方案九:
试试这个:declare@cuidvarchar(200),@doctypeintset@cuid='1,2,3,4,5‘set@doctype=1selecta.*,b.flow_name,c.node_name,c.node_type_id,c.node_order_id,c.node_next_idfromt_doca,t_flowb,t_nodecwherea.df=0andcharindex(','+rtrim(a.cu)+',',','+@cuid+',')>0anda.stin(0,1,2,4)anda.doc_type=@doctypeanda.flow_id*=b.flow_idanda.node_id*=c.node_idorderbya.doc_iddesc99%成功,成功了分给我。其他的回答理论一大堆,来的实际的行不?

时间: 2024-09-27 11:12:29

SQL in() 和base.Dispose(disposing)的问题求助。。。的相关文章

怎么办-microsoft sql 2008 r2 出现错误1406怎么解决 求助~~~

问题描述 microsoft sql 2008 r2 出现错误1406怎么解决 求助~~~ 出现一下错误: 错误1406.无法将值 写入注册表SoftwareClassesCLSID{1F69F884-285E-418E-9715-B9EEE402DD5F}LocalServer32.请确认您有足够的权限访问该注册表项,或者与支持人员联系. 解决方案 http://wenku.it168.com/d_000653718.shtml 参考

部署安装时写入SQL SERVER和Web.config

server|sql|web    在.NET平台下,部署 Web 解决方案是比较方便的.我们可以利用Visual Studio.NET 2003添加一个WEB安装项目,在部署的"文件系统编辑器"中添加项目的主输出和内容文件,非常简易地完成安装程序的制作.     但是,这样制作的安装程序,只是将Web页和ASP.NET程序编译的DLL文件安装到目标机器的IIS目录,对于一般的应用程序是可以的(比如用Access数据库,可以一起打包到安装程序中):如果数据库是SQL SERVER,需要

如何在 SQL Server2000 中保存图像及读取图像信息

server //////////////////////////////////////////////////////////////////////////////////Author: stardicky ////E-mail: stardicky@hotmail.com ////QQNumber: 9531511 ////CompanyName: Ezone International ////Class: HBS-0308 ////title: 如何在 SQL Server2000

ASP.NET如何存取SQL Server数据库图片

asp.net|server|数据|数据库     SQL Server提供了一个特别的数据类型:image,它是一个包含binary数据的类型.下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法.在这篇文章中我们要看到如何在SQL Server中存储和读取图片.         1.建立一个表:       在SQL SERVER中建立这样结构的一个表:      列名 类型 目的   ID Integer 主键ID   IMGTITLE Varchar(50) 图片的标题   IM

呵呵。需要的人一定很多。Creating a SQL Server Database Programmatically

server SQL provides statements to create new databases and database objects. You can execute these statements from your program to create databases programmatically. In this article, I抣l show you how to create a new SQL Server database and its object

SQL Server 数据库还原

原文 http://www.cnblogs.com/ynbt/archive/2013/04/04/2999850.html ---恢复内容开始--- 对于一个优秀的应用程序来说,具有数据恢复功能尤为重要.因为数据恢复功能可以在数据找到破坏时,将数据恢复到系统中,保证系统重新正常运转,从而避免因数据找到异常丢失所带来的损失.本实例将演示怎样在C#中还原数据库. 还原数据库是使用数据库的备份文件对数据库进行还原操作.由于病毒的破坏.磁盘损坏或操作失误等原因会导致数据丢失.不完整或数据错误,此时,需

SQL Server 数据库备份

原文 http://www.cnblogs.com/ynbt/archive/2013/04/04/2999642.html 备份数据库是指对数据库或事务日志进行复制,当系统.磁盘或数据库文件损坏时,可以使用备份文件进行恢复,防止数据丢失. SQL Server数据库备份支持4种类型,分别应用于不同的场合,下面简要介绍. (1)完全备份 完全备份,即完整数据库备份,可以备份整个数据库,包含用户表.系统表.索引.视图和存储过程等所有数据库对象.这是大多数人常用的方式,但需要花费更多的时间和空间,所

要把excel 导入到SQL server中,试了几种方法都没有成功,求助

问题描述 VS2005,C#,SQLSERVER最好能通过存储过程来实现,因为判断的时候灵活一点,可以把一些不符合条件的行过滤掉. 解决方案 解决方案二:一次性全部导入SQL然后再判断哪些需要删除这样方便一点好像解决方案三:usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;usingSystem.

在打包程序中自动安装SQL Server数据库 .

原文:在打包程序中自动安装SQL Server数据库 . 1.创建安装项目"Setup1"安装项目 在"文件"菜单上指向"添加项目",然后选择"新建项目". 在"添加新项目"对话框中,选择"项目类型"窗格中的"安装和部署项目",然后选择"模板"窗格中的"安装项目".在"名称"框中键入 "setup1