本帖最后由 grassfire1127 于 2010-04-14 05:49:51 编辑

解决方案 »

  1.   

    你的是什么数据库啊 SQL里面的输出参数应该用output标识吧 不应该是out
      

  2.   

    是sql server2005,改成output了,但故障还是一样。
      

  3.   

    改成@pageTotal int out了,问题还是一样的
      

  4.   

    改成@pageTotal int output了,问题还是一样的
      

  5.   

    你用的是datareader接受数据
    应该不影响
    外面取pageTotal
    用cmd.Parameters["@pageTotal"].Value;
    查询结果循环datareader放入LIST就好了
    你混淆了
      

  6.   


    我是用:pageTotal = Convert.ToInt32(cmd.Parameters["@pageTotal"].Value);取的output的值
    啊,您的意思是把这句放如while循环里去?那样不是要重复赋一样的值很多次?
      

  7.   

    create PROCEDURE [dbo].[SY2]
    (
    @pageTotal int out --返回页总数
     )ASSET @pageTotal=4
    SELECT * FROM tbGOdeclare @i int
    exec [dbo].[SY2] @i out
    select @i
    /*
    代码         编号          品种         金额          日期
    ---------- ----------- ---------- ----------- -----------------------
    0001       1001        材料         500         2010-01-01 00:00:00.000
    0001       1002        物件         1000        2010-01-01 00:00:00.000
    0001       1003        饰品         1000        2010-01-01 00:00:00.000
    0001       1004        废料         230         2010-01-01 00:00:00.000
    0002       1003        饰品         450         2010-01-01 00:00:00.000
    0002       1002        物件         900         2010-01-01 00:00:00.000
    0002       1003        饰品         2500        2010-01-01 00:00:00.000
    0003       1004        废料         1500        2010-01-01 00:00:00.000
    0003       1002        物件         700         2010-01-01 00:00:00.000
    0003       1003        饰品         250         2010-01-01 00:00:00.000
    0001       1004        废料         500         2010-01-02 00:00:00.000
    0001       1002        物件         150         2010-01-02 00:00:00.000
    0001       1003        饰品         100         2010-01-03 00:00:00.000
    0001       1001        材料         200         2010-01-03 00:00:00.000
    0002       1003        饰品         2500        2010-01-03 00:00:00.000
    0003       1002        物件         1500        2010-01-03 00:00:00.000
    0002       1003        饰品         2500        2010-01-03 00:00:00.000
    0002       1001        材料         3500        2010-01-03 00:00:00.000
    0003       1004        废料         1500        2010-01-03 00:00:00.000
    0001       1004        废料         500         2010-01-04 00:00:00.000
    0001       1003        饰品         2500        2010-01-04 00:00:00.000
    0002       1001        材料         1200        2010-01-04 00:00:00.000
    0003       1003        饰品         10          2010-01-04 00:00:00.000(23 行受影响)
    -----------
    4(1 行受影响)
    */测试可以输出
      

  8.   

    使用您的方法测试:
    declare @i int
    exec [dbo].[SY2] @i out
    select @i
    能同时得到返回的数据集和输出参数的正确值4,看来存储过程没问题,但到程序中怎么变成0了呢?还请大家指教。
      

  9.   

    这个有点奇怪,会不会是ADO.net的缘故.楼主能跟踪一下存储过程吗?
      

  10.   

    执行两次 一次用来接收OUT值;一次用来结束查询查询值
      

  11.   

     ExecuteReader方法不返回存储过程的返回值
      

  12.   

    但我去掉SELECT * FROM board这句,程序一点不改就可以得到输出参数的值了啊,而且我以前也是这样也没问题啊
      

  13.   

    找到问题了,是c#程序中的问题,要先关闭dr,再取输出参数。多谢大家啊!
      

  14.   

    不要使用ExecuteReader方法
    而应该用SqlDataAdapter,创建一个adapter容器,返回一个DataSet集(当然你可以添充到DataTable里面),最后再取你的output值