我用EF5.0调用sql的存储过程时,有个OUTPUT返回值 ,为什么在数据库中输出的是正确的,但获取时值就不正确,各位大侠谁遇到过这种问题
如果把类型换为DbType.UInt64又变为
你的存储过程中的 totalCount 是什么类型?
你的 GetListPaging 是咋实现的?
@从小就不会: 数据类型用 int 。
@Launcher:
@从小就不会: 你应该调试下存储过程中传入的参数的值是多少。
@Launcher: 这是我用profiler查看的结果
@从小就不会: 你这样测试下,你在你的存储过程中,把脚本都注释掉,然后只写一条赋值语句:
@totalCount = 101
@Launcher: 照您的方法,我把脚本都注释了,并且把EF中的返回类型设置成无,数值就正常了
@从小就不会: 你的存储过程中有没有类似 @totalCount = 101 赋值的语句?
@Launcher: 有的,最后一个exec就是给输出参数赋值的,而且如果我把存储过程改为这样
http://img.bbs.csdn.net/upload/201404/17/1397717018_544236.jpg
并且 把返回值改为实体后,返回的输出变量值 又是错误 的,难道EF中的存储过程不能共同输出数据集和输出变量?
@从小就不会: 看不懂,我只知道如果直接设置 @totalCount = 1223,结果就正确,因此你的脚本的最后应该有句: @totalCount = xxxx。从存储过程返回值获取的话(比如用 SqlDataReader),脚本最后应该添加 return @totalCount 语句。
@Launcher: 我的意思是这样的,如果用EF来调用存储过程时,它会根据这个存储过程自动生成一个方法,然后你可以在这个方法上选择返回值类型。我照你的方法试了下,如果存储过程中只有一个set @totalCount=101这句时,我把返回值类型设置为无,运行时得到结果是正确的。但我又把那个分页的语句加上后,因为要得到一个对象集合,我就把那个返回值类型设置为实体对象,再运行时,实体对象里有值了,但输出参数的值就错了。
@从小就不会:你的 paper.TotalCount 为 11 时,result 是不是包含了 11 条记录,或者是第一条记录的第一个字段的值是 11?
@Launcher: 不是,而且我最奇怪的是ObjectParameter param = new ObjectParameter("totalCount", SqlDbType.Int)这个类里面的第二个参数,如果变成其他类型时,比如DbType.Int16,DbType.Int32,DbType.Int64, paper.TotalCount的值 都不一样,不知道是什么原因
@从小就不会: 用 SqlDataReader 调用时,存储过程的传出参数通过 SqlParameter 来获取,要指定 ParameterDirection.Output,如果指定为 ParameterDirection.ReturnValue,它就会从存储过程的返回值中读取。存储过程的返回值是确定类型或游标的话,通过 SqlDataReader 来读取结果。
你可以用 SqlDataReader 测试下下你的存储过程,如果没有问题的话,那么可能的原因在于 EF 在处理返回值和传输参数时没有正确使用 SqlDataReader。
给你如下理由不用EF
http://www.cnblogs.com/humble/p/3535883.html