如何从C#函数的存储过程返回多个输出参数

如何从C#函数的存储过程返回多个输出参数,第1张

概述我正在使用输出参数从我的数据库中获取值. 这是我的存储过程: ALTER PROCEDURE [dbo].[sp_GetCustomerMainData] -- Add the parameters for the stored procedure here @Reference nvarchar(100), @SubscriptionPIN nvarch 我正在使用输出参数从我的数据库中获取值.

这是我的存储过程:

ALTER PROCEDURE [dbo].[sp_GetCustomerMainData]     -- Add the parameters for the stored procedure here        @Reference nvarchar(100),@SubscriptionPIN nvarchar(100) OUTPUT,@SignupDate nvarchar(100) OUTPUT,@ProductCount int OUTPUTASBEGIN    -- SET NOCOUNT ON added to prevent extra result sets from    -- interfering with SELECT statements.    SET NOCOUNT ON;    SET @SubscriptionPIN = 'N/A'    SET @SignupDate = 'N/A'    SET @ProductCount = 0    -- Insert statements for procedure here    IF EXISTS(SELECT [SubscriptionPIN] FROM [norton].[dbo].[Customers] WHERE [Reference] = @Reference)    BEGIN        SELECT top 1 @SubscriptionPIN = [SubscriptionPIN],@SignupDate = SignUpDate  FROM [norton].[dbo].[ProductList] WHERE [Reference] = @Reference        SET @ProductCount = (SELECT COUNT(*) FROM [norton].[dbo].[ProductList] WHERE [Reference] = @Reference)    END    RETURN (@SubscriptionPIN)    RETURN (@SignupDate)    RETURN (@ProductCount)END

我不确定最后的回报:

RETURN (@SubscriptionPIN)RETURN (@SignupDate)RETURN (@ProductCount)

另一方面,这是c#代码:

using (sqlConnection con = new sqlConnection(connectionInfo)){    using (sqlCommand cmd = new sqlCommand("sp_GetCustomerMainData",con) { CommandType = CommandType.StoredProcedure })    {        cmd.Parameters.Add("@Reference",sqlDbType.NVarChar).Value = CustomerReferenceID;        sqlParameter SubscriptionPIN = new sqlParameter("@TheCustomerID",sqlDbType.NVarChar) { Direction = ParameterDirection.Output };        cmd.Parameters.Add(SubscriptionPIN);        sqlParameter SignupDate = new sqlParameter("@SignupDate",sqlDbType.NVarChar) { Direction = ParameterDirection.Output };        cmd.Parameters.Add(SignupDate);        sqlParameter ProductCount = new sqlParameter("@ProductCount",sqlDbType.Int) { Direction = ParameterDirection.Output };        cmd.Parameters.Add(ProductCount);        con.open();        try        {            cmd.ExecuteNonquery();            if (cmd.Parameters["@TheCustomerID"].Value.ToString() != "N/A")            {                aStatus.SubscriptionPIN = cmd.Parameters["@TheCustomerID"].Value.ToString();                aStatus.SignupDate = cmd.Parameters["@SignupDate"].Value.ToString();                aStatus.ProductCount = int.Parse(cmd.Parameters["@ProductCount"].Value.ToString());                aStatus.Result = "0: Reference ID Found";             }             else             {                 aStatus.Result = "1: Reference ID does not exists";                 return aStatus;             }          }          catch (sqlException sqlExc)          {              foreach (sqlError error in sqlExc.Errors)              {                  aStatus.Result = string.Format("{0}: {1}",error.Number,error.Message);                  return aStatus;              }          }      }}

当我运行此代码时,我收到错误:

system.invalIDOperationException: String[1]: the Size property has an invalID size of 0.
at System.Data.sqlClIEnt.sqlParameter.ValIDate(Int32 index,Boolean isCommandProc)
at System.Data.sqlClIEnt.sqlCommand.SetUpRPCParameters(_sqlRPC rpc,Int32 startCount,Boolean inSchema,sqlParameterCollection
parameters)
at System.Data.sqlClIEnt.sqlCommand.buildrPC(Boolean inSchema,sqlParameterCollection parameters,_sqlRPC& rpc)
at System.Data.sqlClIEnt.sqlCommand.RunExecuteReaderTds(CommandBehavior
cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean
async)
at System.Data.sqlClIEnt.sqlCommand.RunExecuteReader(CommandBehavior
cmdBehavior,String
method,DbAsyncResult result)
at System.Data.sqlClIEnt.sqlCommand.InternalExecuteNonquery(DbAsyncResult
result,String methodname,Boolean sendtopipe)
at System.Data.sqlClIEnt.sqlCommand.ExecuteNonquery()

我不知道从存储过程发送许多输出参数的正确方法是什么,有人可以帮忙吗?

解决方法 您需要指定nvarchar参数的最大长度:
sqlParameter SubscriptionPIN = new sqlParameter("@TheCustomerID",sqlDbType.NVarChar,100) { Direction = ParameterDirection.Output };cmd.Parameters.Add(SubscriptionPIN);sqlParameter SignupDate = new sqlParameter("@SignupDate",100) { Direction = ParameterDirection.Output };cmd.Parameters.Add(SignupDate);

从存储过程中删除return语句.您无需为返回的输出参数执行任何 *** 作. (另外,您只能使用一个return语句,并且只能返回整数值.您可以使用带有ReturnValue方向的参数来获取返回的值.)

总结

以上是内存溢出为你收集整理的如何从C#函数的存储过程返回多个输出参数全部内容,希望文章能够帮你解决如何从C#函数的存储过程返回多个输出参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1243091.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存