存储过程与传递的字符型参数问题
是这样子的,要写一个稍复杂的查询,用存储过程来写,大概象下面这样:
CREATE procedure CMRC_PRODUCT_QUERY
(
@skey NVarChar(100), /* 商品名*/
@CategoryID int, /* 类别ID */
@CateType int, /* 类别类型 [0所有 1系统大类别 2系统小类别 3系统3级类 4系统4级类] */
@Province NVarChar(100), /* 商品所在地域 [所有|未指定|北京|天津 ..]*/
....此处省略100字
)
as
set nocount on
Declare @SqlText AS Varchar(1000)
/* 主类型*/
if(@CateType = 1)
set @SqlText = ' from CCC_Products where 0=0 and CategoryID_SB=' + Cast(@CategoryID AS varchar(20)) + ' '
/* 地域开始 */
if(@Province = '所有')
set @SqlText = @SqlText
else
set @SqlText = @SqlText + ' and Province = ' +@Province
/* 商品名开始 */
set @SqlText = @SqlText + ' and ProductName like ' + '%' + @skey + '%'
set @SqlText = 'Select count(ProductID) ' + @SqlText
Exec(@SqlText)
问题是当传@Province和@skey这两个字符型的参数的时候,查询就出错了
@skey这个肯定是有问题的,因为要模糊查询,所以要加'%',这个单引号我不会在存储过程中处理,但是@Province这个参数竟然也出错哟,郁闷,我传象 string Province = "天津"; 这样的Province参数进去,系统报错为 异常详细信息: System.Data.SqlClient.SqlException: 列名 '天津' 无效。
请各位有经验的达人帮忙看看这两个问题。如搞定100分随后奉上。
CREATE procedure CMRC_PRODUCT_QUERY
(
@skey NVarChar(100), /* 商品名*/
@CategoryID int, /* 类别ID */
@CateType int, /* 类别类型 [0所有 1系统大类别 2系统小类别 3系统3级类 4系统4级类] */
@Province NVarChar(100), /* 商品所在地域 [所有|未指定|北京|天津 ..]*/
....此处省略100字
)
as
set nocount on
Declare @SqlText AS Varchar(1000)
/* 主类型*/
if(@CateType = 1)
set @SqlText = ' from CCC_Products where 0=0 and CategoryID_SB=' + Cast(@CategoryID AS varchar(20)) + ' '
/* 地域开始 */
if(@Province = '所有')
set @SqlText = @SqlText
else
set @SqlText = @SqlText + ' and Province = ' +@Province
/* 商品名开始 */
set @SqlText = @SqlText + ' and ProductName like ' + '%' + @skey + '%'
set @SqlText = 'Select count(ProductID) ' + @SqlText
Exec(@SqlText)
问题是当传@Province和@skey这两个字符型的参数的时候,查询就出错了
@skey这个肯定是有问题的,因为要模糊查询,所以要加'%',这个单引号我不会在存储过程中处理,但是@Province这个参数竟然也出错哟,郁闷,我传象 string Province = "天津"; 这样的Province参数进去,系统报错为 异常详细信息: System.Data.SqlClient.SqlException: 列名 '天津' 无效。
请各位有经验的达人帮忙看看这两个问题。如搞定100分随后奉上。
...全文
相关推荐
Navicat运行Oracle存储过程[项目代码]
本文档详细介绍了CLOB与BLOB的区别及其在存储过程中的使用场景,帮助开发者合理地利用这些数据类型存储和操作大量数据。缓存溢出问题在数据库应用中偶有发生,通常是因为数据缓存区域容量不足导致的。
第9章服务器环境下的SQL.pptx
这种方式下,SQL语句与宿主语言的数据交换是一个关键问题。通过预处理器,嵌入的SQL语句会被转化为调用函数的形式,这些函数将SQL语句作为字符串参数,然后执行这些语句。
Oracle PLSQL编程精简版
**存储过程和函数**:存储过程是预编译的PLSQL代码块,可重复调用。函数与存储过程类似,但必须返回一个值。
pl/sql高级编程针对oracle
**存储过程和函数**:存储过程和函数是预编译的PL/SQL代码块,存储在数据库中。它们可以接受参数,返回结果,并在需要时被调用。10.
互联网安全
**字符型注入**:当参数为字符串时,在字符串的前后加上单引号或双引号,尝试注入恶意代码,如:`http://xxx.xxx.xxx/abc.asp?


