none
通过SqlDataAdapter构造函数传参数的问题 RRS feed

  • 问题

  • web中有很多查询条件,我想通过参数传到存储过程中。基本的sql语句为 selsect .....  from .... into.....where.....and.....。 

    如果传入的参数为:EXEC pagesql '*',' FROM db_WomenClothes ',5,1 ,''     不会报错.

    如果传入的参数为:EXEC pagesql '*',' FROM db_WomenClothes ',5,1 ,'WHERE Season ='春季' '     就会报错,原因是  'WHERE Season ='春季' '  引号中套引号的语法错误。

    在存储过程中用一个数组接收传入的参数,接收到的数据应该是WHERE Season ='春季',理论上没有错误。

    ALTER PROCEDURE [dbo].[pagesql]
        @sqlSelect varchar(800)        --SELECT 后面 FROM 前面 的 字段 不用包含SELECT
        ,@sqlFrom varchar(800)        --FROM 后面 的 字段 包含FROM
        ,@countPerPage int            -- 每页数据行数
        ,@toPage int                --要转到的页码
        ,@Condition varchar(800)    --条件
    AS

    实在不知道怎么改,问问大家

    2013年5月19日 23:56

答案

  • Tried this?

    EXEC pagesql '*',' FROM db_WomenClothes ',5,1 ,'WHERE Season =''春季'' '

    By the way, you can double check parameter with print like:

    print @sqlfrom

    • 已标记为答案 wh_xiao 2013年5月21日 1:12
    2013年5月20日 0:22

全部回复

  • Tried this?

    EXEC pagesql '*',' FROM db_WomenClothes ',5,1 ,'WHERE Season =''春季'' '

    By the way, you can double check parameter with print like:

    print @sqlfrom

    • 已标记为答案 wh_xiao 2013年5月21日 1:12
    2013年5月20日 0:22
  • Tried this?

    EXEC pagesql '*',' FROM db_WomenClothes ',5,1 ,'WHERE Season =''春季'' '

    By the way, you can double check parameter with print like:

    print @sqlfrom


    'WHERE Season ='春季' '  出错的根本原因是把语句分成了三部分'WHERE Season ='  , 春季, ' '。 sql传参数的形式必须为 'xxxxxxxxx',如果中间要套引号出错是必然的。有些sql语句只能传递带引号的参数。这也是sql server的一个bug。
    2013年5月20日 1:10
  • I'll not call bug so fast, can you post whole sp? 
    2013年5月20日 1:16
  • 如果改成下面的,又提示列名 '春季' 无效。

    char(39)表示单引号,理论上没有任何错误。

    EXEC pagesql '*',' FROM db_WomenClothes ',5,1 ,' WHERE Season = char(39)+春季+char(39) '

    {"列名 '春季' 无效。"}

    2013年5月20日 7:12
  • 如果改成下面的,又提示列名 '春季' 无效。

    char(39)表示单引号,理论上没有任何错误。

    EXEC pagesql '*',' FROM db_WomenClothes ',5,1 ,' WHERE Season = char(39)+春季+char(39) '

    {"列名 '春季' 无效。"}

    LZ加上char(39)是想引用ascii码表是吧


    给我写信: QQ我:点击这里给我发消息

    2013年5月20日 10:20
  • ' WHERE Season = +春季+'
    一般来讲,春季应该是传入的参数,应该要拆分开的
    @season varchar(800)
    'where Season ='+@season
    或者' WHERE Season ='+ '''春季'''

    给我写信: QQ我:点击这里给我发消息


    2013年5月20日 10:25
  • 因为sqlserver需要转义,所以如果春季是字符类型的话,要在前面加一个单引号转义

    比如season='春季'

    如果是拼接sql

    'season='+'''春季'''


    给我写信: QQ我:点击这里给我发消息


    2013年5月20日 10:28
  • +'''春季'''

    六个单引号,第一个单引号跟第六个单引号说明这个是一个字符串,第二个跟第五个单引号用来转义,

    第三个跟第四个单引号说明这个值是一个字符值

    不知道这样解释LZ明白不???


    给我写信: QQ我:点击这里给我发消息

    2013年5月20日 10:31
  • EXEC pagesql '*',' FROM db_WomenClothes ',5,1 ,' WHERE Season = ''春季'' '
    2013年5月21日 1:12