2016-01-29 2 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 сервера, @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); 

Любая помощь будет принята с благодарностью, спасибо

UPDATE - Добавлен вывод и SQLType к параметру и теперь струнные менеджеры возвращает «».

+1

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

+0

, когда вы используете выходной параметр типов строк, необходимо установить «размер» и направление. Вы задали направление, но не размер. если вы не задаете размер, вы можете получить только один символ из строки - я вижу обновление - вы ничего не получаете. Идем дальше и задаем размер –

ответ

0

вы должны изменить 2 вещи:

значение 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

Смежные вопросы