2013-11-22 5 views
1

Мой DBA создал следующий ХП, который он настаивает на том, отлично работает при вызове в SQL Server:ADO.NET - Trouble Получение выходного параметра

CREATE procedure [dbo].[GetParentID] 
    @SSHIP_AppID as varchar(50), 
    @ParentID as varchar(150) OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT @ParentID = a.iBuild_GUID 

    FROM dbo.XRef_iBuild_SSHIP as a 
    WHERE a.SSHIP_appId = @SSHIP_AppID 
    AND a.SSHIP_appId <> '' 
END 

Я создал следующий ADO.NET Wrapper, но у меня возникли проблемы получение выходного параметра. Я продолжаю возвращать «OUTPUT» в качестве значения:

private string GetParentId(string appId) 
     { 
      var connection = new SqlConnection(); 
      string parentId = String.Empty; 
      try 
      { 
       connection.ConnectionString = "...) 
       var command = new SqlCommand("GetParentId", connection); 

       command.CommandType = CommandType.StoredProcedure; 

       command.Parameters.Add(new SqlParameter("@SSHIP_AppID", appId)); 

       command.Parameters.Add(new SqlParameter("@ParentID", ParameterDirection.Output)); 

       connection.Open(); 

       command.ExecuteNonQuery(); 

       parentId = (command.Parameters["@ParentId"].Value).ToString(); 
      } 
      catch (Exception ex) 
      { 
       LogError(appId, ex.ToString(), "Interface12 - Cannot get ParentId", null, 0); 
      } 
      finally 
      { 
       connection.Close(); 
      } 
      return parentId; 
     } 
    } 

Что я делаю неправильно?

+0

Одна ошибка - команда. Параметр [@ParentId]] должен быть] "@ ParentID"], но я все равно получаю то же самое errot – user2471435

ответ

1

В new SqlParameter("@ParentID", ParameterDirection.Output) второй аргумент рассматривается как аргумент object value и, очевидно, преобразован в строку.

(Это неявное преобразование, на мой взгляд, является дефектом дизайна в ADO.NET. Он должен вызывать исключение для любого неизвестного типа ввода.).

Выберите лучшую перегрузку.

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