我正在调用一个具有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.
有人有任何想法吗?
对于具有可变长度数据类型(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属性.
希望这会有所启发.