我的存储过程标题如下:
ALTER proc [dbo].[brpbomweight] @cinvcode varchar(50), @dec3 decimal(18,6) output
as
我用以下语法可以输出值为 0.005623
declare @dec3 decimal(18,6) exec brpbomweight '1201SPE13601', @dec3 output
print @dec3
我用以下C#代码,输出@dec3永远都是 0,不知道是什么原因,高人请指教
string strConn = command.Class1.cn;
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
SqlCommand cmd = new SqlCommand("brpbomweight", conn);
cmd.CommandType = CommandType.StoredProcedure;
//输入参数
SqlParameter param1 = new SqlParameter("@cinvcode", SqlDbType.VarChar, 50);
param1.Value = "1201SPE13601"; cmd.Parameters.Add(param1);
//输出参数
SqlParameter param = new SqlParameter("@dec3", SqlDbType.Decimal);
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param); //执行存储过程
cmd.ExecuteNonQuery();
conn.Close();
//输出值 MessageBox.Show(param.Value.ToString());
你可以参考 MSDN :http://msdn.microsoft.com/zh-cn/library/t547y10h.aspx
这个有关于小数的设置,感觉有点麻烦。
sqlParametersOut.Add(new SqlParameter("@dec3", SqlDbType.Decimal, 18, ParameterDirection.Output, true, byte.Parse("18"), byte.Parse("6"), "", DataRowVersion.Default, null));
如果单纯的输出的话,为什么不直接输出 NVarchar类型呢,然后在前台处理时,转化下就可以了白。
差别好像 就是rtnval.Direction = ParameterDirection.ReturnValue; 这一句,不过我改成这样子就会报错,报错的文字 是 过程或函数 'brpbomweight' 需要参数 '@dec3',但未提供该参数。
SqlParameter param = new SqlParameter("@dec3", SqlDbType.Decimal);
把@dec3中的@去掉试试
去掉了也是一样
数据库
@Snail的梦: 不行,试过了没有用
oParam[0].Value = strApplicateMonth;
oParam[1].Direction = ParameterDirection.Output;
oParam[2].Value = 0;
oParam[2].Direction = ParameterDirection.Output;
oParam[3].Value = strDepartmentCode;
int IntResult = Convert.ToInt32(oParam[2].Value);
string strOrderCode = oParam[1].Value.ToString();
在sql里的赋值例如set @result=1 这个是IntResult 的结果
@Snail的梦: 不行,试过了没有用,有没有邮箱地址发给你看你一下,谢谢
@zhengyingcan: sunlarylv@163.com
@zhengyingcan: 我发到你邮箱了,你试试能不能行。
cmd.Parameters["@dec3"].Value.ToString();
试试这个
//输出参数
SqlParameter param = new SqlParameter("@dec3", SqlDbType.Decimal);
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param); //执行存储过程 cmd.ExecuteNonQuery(); MessageBox.Show(param.Value.ToString()); MessageBox.Show(cmd.Parameters["@dec3"].Value.ToString());
两种方式出来的结果都是0
你确定你在你的存储过程那里对那个 @dec3 进行了 正确的 赋值操作码?
有实际上跑过那个存储过程没有?
//输出参数
SqlParameter param = new SqlParameter("@dec3", SqlDbType.Decimal);
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param); //执行存储过程 cmd.ExecuteNonQuery(); MessageBox.Show(param.Value.ToString()); MessageBox.Show(cmd.Parameters["@dec3"].Value.ToString());
两种方式出来的结果都是0
@dec3不用赋值吧, 因为是运算出来的结果
@zhengyingcan: 按照你的 代码的话,我当时测试的是 0.1 可能是被四舍五入了吧···
dbParam.Size =
这帖子原来是,这么久了