在sql中存储的Proc不返回值

时间:2010-09-09 14:08:01

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

我的函数没有返回任何内容 - 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中获得了正确的zipcode。为什么我不在Visual Studio中获取它?

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

AS 

Begin

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

End

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

7 个答案:

答案 0 :(得分:6)

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

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

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

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

ds将包含查询结果。

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

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

答案 1 :(得分:4)

您似乎无法在任何地方向strReturn分配任何内容。您还需要使用ExecuteScalar从单行单列结果集中检索值。

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

带有OUTPUT的{​​{1}}参数。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

strReturn未设置,您需要拨打ExecuteScalar而不是ExecuteNonQuery

答案 6 :(得分:0)

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

也许是以下代码

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

 return (string)zipObject;