【问题标题】:Stored Proc in sql that does not return the value存储在 sql 中的 Proc 不返回值
【发布时间】:2011-04-10 07:01:48
【问题描述】:

我的函数没有返回任何东西 - strReturn 是空的:

        try
        {
            SqlParameter[] parameter = new SqlParameter[]
            {
                new SqlParameter("@MerchantID", MercahntID),
                new SqlParameter("@LoactionID", LoactionID)
            };

            SqlHelper.ExecuteNonQuery(DbConnString, System.Data.CommandType.StoredProcedure, "GetMerchantLocationZip", parameter);

            return strReturn;
        }
        catch (Exception ex)
        {
            LogError("Error Occurred When Retrieving Mercahnt Location Zip: MercahntID:" + MercahntID.ToString(), ex);
            return strReturn;
        }
    }

当我使用“exec GetMerchantLocationZip (3333, 373773)”执行这个存储过程时,我在 SQL 中得到了正确的邮政编码。为什么我不能在 Visual Studio 中得到它?

Create PROCEDURE [dbo].[GetMerchantLocationZip](
@MerchantID bigint,
@LoactionID bigint)

AS 

Begin

Select Zip FROM Merchant_Location 
where MerchantID=@MerchantID AND LocationID =@LoactionID

End

我正在学习,如果这是一个明显的错误,请道歉。谢谢大家!

【问题讨论】:

  • 很棒的伙计们!感谢大家的帮助! :)

标签: c# asp.net sql sql-server ado.net


【解决方案1】:

您没有得到结果,因为您没有将代码作为查询执行。

您正在调用 SqlHelper.ExecuteNonQuery(),但不会返回任何结果。

看起来您正在使用 SqlHelper 应用程序块,所以我认为您想要的代码是(如果您在查询中返回多行):

DataSet ds = SqlHelper.ExecuteDataSet(DbConnString,
                                      CommandType.StoredProcedure,
                                      "GetMerchantLocationZip",
                                      parameter);

ds 然后将包含查询结果。

如果您尝试从数据库中检索单个值而不是一组行,那么您的代码将是:

object zip = SqlHelper.ExecuteScalar(DbConnString,
                                     CommandType.StoredProcedure,
                                     "GetMerchantLocationZip",
                                     parameter);

【讨论】:

    【解决方案2】:

    您似乎没有在任何地方为strReturn 分配任何东西。您还需要使用 ExecuteScalar 从单行单列结果集中检索值。

    strReturn = SqlHelper.ExecuteScalar(...) as string;
    

    OUTPUT 参数与ExecuteNonQuery

    【讨论】:

      【解决方案3】:

      您正在调用 ExecuteNonQuery,它只返回受影响的行数。试试这个:

      var zipCode = SqlHelper.ExecuteScalar(DbConnString, System.Data.CommandType.StoredProcedure, "GetMerchantLocationZip", parameter);
      

      【讨论】:

        【解决方案4】:

        您正在使用不返回结果的 ExecuteNonQuery,它只会返回更新的行数。你想执行一个阅读器。

        【讨论】:

          【解决方案5】:

          您可能希望调用 ExecuteScalar 而不是 ExecuteNonQuery,因为它预计不会返回。

          也许是下面的代码

           var zipObject = SqlHelper.ExecuteScalar(DbConnString, System.Data.CommandType.StoredProcedure, "GetMerchantLocationZip", parameter);
          
           return (string)zipObject;
          

          【讨论】:

            【解决方案6】:

            strReturn 未设置,您需要调用ExecuteScalar 而不是ExecuteNonQuery

            【讨论】:

              【解决方案7】:

              检查您的拼写!!您可能在 SQL 语句中抛出异常,因为您在某处(或许多地方)拼错了“Merchant”或“Location”。

              而且,正如其他人所指出的,您可能想要这样:

              return SqlHelper.ExecuteScalar(DbConnString, 
                  System.Data.CommandType.StoredProcedure, 
                  "GetMerchantLocationZip", parameter);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-11-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多