当前位置:  开发笔记 > 编程语言 > 正文

输出参数未从存储过程返回

如何解决《输出参数未从存储过程返回》经验,为你挑选了1个好方法。

我正在调用一个具有3个OUTPUT参数的SQL proc.在调用proc之后,其中一个参数不会返回其他两个值时的值.Profiler显示正在返回所有3个值.

para中的params声明如下...

@UsrVariableID INT OUTPUT,
@OrganisationName NVARCHAR(256) OUTPUT,
@Visible bit OUTPUT

调用proc的代码就像这样......

cm.Parameters.AddWithValue("@OrganisationName", name);
cm.Parameters["@OrganisationName"].Direction = ParameterDirection.Output;
cm.Parameters.AddWithValue("@Visible", visible);
cm.Parameters["@Visible"].Direction = ParameterDirection.Output;

cm.ExecuteNonQuery();

name = cm.Parameters["@OrganisationName"].Value.ToString();
visible = bool.Parse(cm.Parameters["@Visible"].Value.ToString());
id = int.Parse(cm.Parameters["@UsrVariableID"].Value.ToString());

失败的参数是@OrganisationName.

我想知道它是否因为param在代码中是字符串类型而在proc中是NVARCHAR.

有人有任何想法吗?



1> Scott Saad..:

对于具有可变长度数据类型(nvarchar,varchar等)的输出参数,我发现更明确可以产生更好的结果.在您发布的情况下,未在C#端指定类型.我可能会改变一些东西,如下所示:

SqlParameter theOrganizationNameParam = new SqlParameter( "@OrganisationName", SqlDbType.NVarChar, 256 );
theOrganizationNameParam.Direction = ParameterDirection.Output;
cm.Parameters.Add( theOrganizationNameParam );
cm.ExecuteNonQuery();
name = theOrganizationNameParam.Value;

通过这种方式,您可以保证输出paratmer具有正确的数据类型,因此可以在不抛出异常的情况下访问Value属性.

希望这会有所启发.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有