2010-09-09 83 views
2

我的功能並不返回任何東西存儲過程 - strReturn是空的:在SQL中沒有返回值

 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 [email protected] AND LocationID [email protected] 

End 

我在學習,所以很抱歉,如果這是一個明顯的錯誤。謝謝大家!

+0

驚人的傢伙!感謝所有的幫助! :) – Ram 2010-09-09 14:25:55

回答

6

你沒有得到結果,因爲你沒有執行代碼作爲查詢。

你打電話給SqlHelper.ExecuteNonQuery(),它不會返回任何結果。

看起來你正在使用的應用程序提供SQLHelper塊,所以我想你想的代碼將是(如果你在查詢返回多個行):

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

ds然後將包含查詢的結果。

如果你想從數據庫中檢索,而不是一組行的一個值,那麼你的代碼將是:

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

您似乎沒有在任何地方給strReturn分配任何東西。您還需要使用ExecuteScalar從單行單列結果集中檢索值。

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

OUTPUT參數與ExecuteNonQuery

1

要調用的ExecuteNonQuery只返回受影響的行數。試試這個:

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

檢查您的拼寫!您可能在SQL語句中引發異常,因爲您在某處(或許多地方)拼錯了「商家」或「位置」。

而且,正如其他人所指出的那樣,你可能希望這樣的:

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

您正在使用的ExecuteNonQuery不返回結果,它只是將返回更新的行數。你想執行一個閱讀器。

0

strReturn沒有被設置,您需要撥打ExecuteScalar而不是ExecuteNonQuery

0

您可能想要調用ExecuteScalar而不是ExecuteNonQuery,因爲該預期沒有返回。

也許下面的代碼

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

return (string)zipObject;