使用ado执行存储过程,output参数无法设置精度 返回
老师,调用存储过程时,设置精度不起作用
var output = new SugarParameter("@num", 0, type: System.Data.DbType.Decimal, System.Data.ParameterDirection.Output);
output.Scale = 8;
db.Ado.UseStoredProcedure().GetDataTable("Web_Num", output);
///生成SQL
declare @p1 numeric(29,0) //小数位数应该是8
set @p1=2
exec Web_Num @num=@p1 output
select @p1
热忱回答(18)
-
fate sta VIP01个月前
你这个是打印的SQL不准的。
你是什么库
0 回复 -
fate sta VIP01个月前
sqlserver用sqlprofile监控 拿出真实SQL
0 回复 -
cccppp VIP01个月前
就是使用sqlprofiler抓取的
0 回复 -
cccppp VIP01个月前
@fate sta:sqlserver 2008 和2016都是这样
0 回复 -
cccppp VIP01个月前
@fate sta:我看了些源码,有两点,一个是SugarParameter没有重写scale,DbParameter可能具有某些约束,导致值没有更新过去
还有一个就是GetSqlParameter里面,没有SqlParameter.scale赋值,我改了这两个地方就对了。还是说有其他方法正确配置吗?
我不太清楚,
0 回复 -
fate sta VIP01个月前
看库的兼容等级有没有改过来 ,存储过程 用decimal看一下
0 回复 -
fate sta VIP01个月前
还有问题提供一个没有业务的测试存储过程
不大可能有问题,因这么多年过去了有问题早有人提了
0 回复 -
cccppp VIP01个月前
@fate sta:
declare @p1 numeric(29,0)
set @p1=2
exec Web_Num @num=@p1 output
select @p1
是一样的
0 回复 -
fate sta VIP01个月前
兼容等级升级一下看看
0 回复 -
fate sta VIP01个月前
还有存储过程提供 可以复制的脚本
0 回复 -
cccppp VIP01个月前
@fate sta:里面有
3个 我都试了下,都一样,还是说其它方式升级?我对这个理解不太深
0 回复 -
cccppp VIP01个月前
@fate sta:
Create PROCEDURE [dbo].[Web_Num]
(
@num decimal(28,8) OUTPUT
)
--@encode$--
AS
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
set @num=1.55555
0 回复 -
cccppp VIP01个月前
@fate sta:
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
DbType = DbType.SqlServer,
ConnectionString = "server=localhost;database=jmjjj;uid=sa;pwd=hhhhhhh;Pooling=true;",
});
var output = new SugarParameter("@num", 0, type: System.Data.DbType.Decimal, System.Data.ParameterDirection.Output);
db.Ado.UseStoredProcedure().GetDataTable("Web_Num", output);
0 回复 -
fate sta VIP01个月前
SqlSugarCore 5.1.4.167-preview28
更新到最新预览版本已修复
0 回复 -
cccppp VIP01个月前
谢谢老师,麻烦了
0 回复 -
cccppp VIP01个月前
@fate sta:老师方便发一个netframwork版本的吗
0 回复 -
fate sta VIP01个月前
SqlSugar 5.1.4.167-preview28
过五分钟后安装,不要提提前安装framework提交安装有BUG
0 回复 -
cccppp VIP01个月前
@fate sta:谢谢老师 完美解决了 不过有一点就是那个Precision属性也需要照着改一下
因为现在使用外币的很多,默认的29位可能快撑满了
最后最后 十分谢谢老师耐心指导
0 回复