2016-01-29 19 views
0

我寫了一個存儲過程返回一個字符串:從存儲過程C#

USE [database] 

GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [database table] 

    @StoreNum INT, 
    @CustomerID INT, 
    @r VARCHAR(100) OUTPUT 

AS 
BEGIN 

    Select @r = Notes FROM [Database table] 
    WHERE CustomerID = @CustomerID 
    AND StoreNumber = CAST(@StoreNum AS NVARCHAR(10)) 

END 

當我運行在SQL Server Management Studio中,@r返回我期待字符串此存儲過程。

但是,下面的C#代碼中出現錯誤:「無法從int轉換爲字符串」。

  SqlParameter param4 = new SqlParameter("@StoreNum", storeaudit.StoreNumber); 
      SqlParameter param5 = new SqlParameter("@CustomerID", "9"); 
      SqlParameter param7 = new SqlParameter("@r", ""); 

      param5.SqlDbType = System.Data.SqlDbType.Int; 
      param7.Direction = System.Data.ParameterDirection.Output; 

      var NoteMan = db.Database.ExecuteSqlCommand("sp_GetNotesData @StoreNum, @CustomerID, @r", param4, param5, param7); 

      String managers = param7.Value.ToString(); 

      System.Console.WriteLine(param7.Value); 

任何幫助將不勝感激,謝謝

更新 - 增加了輸出和SQLTYPE的參數,現在字符串經理返回「」。

+1

杜佩? http://stackoverflow.com/questions/290652/get-output-parameter-value-in-ado-net –

+0

當你使用字符串類型的輸出參數時,有必要設置'size'和direction。你確實設定了方向但不是大小。如果你沒有設置大小,你可能只會得到單個字符 - 我看到更新 - 你什麼都沒有。繼續並設置大小 –

回答

0

你必須改變兩兩件事:

param5值必須int

設置方向輸出param7

SqlParameter param4 = new SqlParameter("@StoreNum", storeaudit.StoreNumber); 
SqlParameter param5 = new SqlParameter("@CustomerID", 9); 
SqlParameter param7 = new SqlParameter("@r", ""); 
param7.Direction = System.Data.ParameterDirection.Output; 
0

你不應該得到存儲過程的返回值;你應該採取結果集。

試試這個:

string str = db.Database.SqlQuery<string>("sp_GetNotesData @StoreNum, @CustomerID, @r", param4, param5, param7).First(); 
+0

添加代碼並調試後,控制檯返回:數據讀取器有多個字段。多個字段對於EDM基元或枚舉類型無效。 – Cooper1810

+0

這是因爲您不能將複雜對象存儲在字符串中。 http://stackoverflow.com/questions/15932239/error-in-data-reader-in-entity-framework – mariocatch

+0

我實際上已經能夠通過字符串,但程序然後失敗,說不能從字符串轉換爲int – Cooper1810