2015-09-26 2 views
1

У меня есть этот метод, который вызывает хранимую процедуру:ASP.NET Хранится метод Процедура не работает

public List<BarcodeClass> CheckTagId(int tagId) 
{ 
   barcodes = new List<BarcodeClass>(); 
    try 
    { 
    using (SqlCommand command = new SqlCommand("uspCheckTagId", connection)) 
        { 
         command.CommandType = CommandType.StoredProcedure; 
            SqlParameter parameter = new SqlParameter("@TG", SqlDbType.Int) 
            { 
             Direction = ParameterDirection.Input, 
                Value = tagId 
            }; 
            command.Parameters.Add(parameter); 
            connection.Open(); 
            SqlDataReader reader = command.ExecuteReader(); 
            while (reader.Read()) 
            { 
      } 
        } 
    } 
    finally 
    { 
        connection.Close(); 
    } 
     
    return barcodes; 
} 

Моя проблема заключается это не работает. Я просто получаю это сообщение: произошла ошибка. Я знаю, что это не соединение с базой данных, потому что если я изменил имя хранимых процедур на другую хранимую процедуру, оно не вернет это сообщение об ошибке. У меня есть ощущение, что что-то делать с этой частью:

SqlParameter parameter = new SqlParameter("@TG", SqlDbType.Int) 
{ 
    Direction = ParameterDirection.Input, 
    Value = tagId 
}; 

, потому что я передаю в междах, если я использую другую хранимую процедуру с NVARCHAR и передать в строке это работает! это что-то не так с тем, как я передаю int как параметр?

Вот хранимая процедура:

declare @TG int 

    declare @L1R nchar(10) -- Label1 Return Variable 
    declare @L2R nchar(10) -- Label2 Return Variable 
    declare @L3R nchar(10) -- Label3 Return Variable 
    declare @L4R nchar(10) -- Label4 Return Variable 
    declare @LD1R nchar(15) -- LData1 Return Variable 
    declare @LD2R nchar(15) -- LData2 Return Variable 
    declare @LD3R nchar(15) -- LData3 Return Variable 
    declare @LD4R nchar(15) -- LData4 Return Variable 
    set @TG = 10001 
    exec uspCheckTagId @TG, @L1 = @L1R output, @L2 = @L2R output, @L3 = @L3R output, @L4 = @L4R output,  @LD1 = @LD1R output, @LD2 = @LD2R output, @LD3 = @LD3R output, @LD4 = @LD4R output 
   print @L1R 
   print @L2R 
   print @L3R 
   print @L4r 
   print @LD1R 
   print @LD2R 
   print @LD3R 
   print @LD4r 

Пожалуйста, помогите! Я не могу отлаживать это, потому что база данных работает только на сервере, на который я нажимаю, и у меня нет доступа к этому серверу.

+0

что такое полное определение proc, а именно верхнее с объявлением параметров? вы опубликовали объявление переменной, а не объявление параметра. По крайней мере, во всех хранимых процедурах я видел. – Kritner

+1

Вы добавили только входной параметр, но, судя по вызову процедуры в коде SQL, есть также восемь выходных параметров. – Guffa

+1

Блок catch для захвата фактической ошибки облегчит поиск и устранение неисправностей. –

ответ

2

Синтаксис создания СП в SQL сервере:

CREATE PROCEDURE [schema].[procName] 
    @param1 int, 
    @param2 bit 
AS 
BEGIN 
    -- SP Logic 
    declare @someVar int, -- note this is a variable, not a parameter. 
      @anotherVar varchar(10) 

    -- select, updates, deletes, etc 
END 

Что вы опубликовали в качестве определения Proc (который был неполным) не имеет имени параметра @TG, а скорее переменные. Если вы исправите свой proc, чтобы следовать приведенному выше примеру, используйте параметры, а не переменные, которые должны решить вашу непосредственную проблему.

Кроме того, на основе ваших комментариев кода, он выглядит как вы пытаетесь использовать выходные параметры. они должны быть настроены в объявлении SP (как обычные параметры), но с модификаторомили output.

Кажется, что вы хотите что-то вроде этого:

create procedure mySpName 
    @TG int, -- input parameter 
    @L1R nchar(10) out, -- output parameter -- Label1 Return Variable 
    @L2R nchar(10) out, -- Label2 Return Variable 
    @L3R nchar(10) out, -- Label3 Return Variable 
    @L4R nchar(10) out, -- Label4 Return Variable 
    @LD1R nchar(15) out, -- LData1 Return Variable 
    @LD2R nchar(15) out, -- LData2 Return Variable 
    @LD3R nchar(15) out, -- LData3 Return Variable 
    @LD4R nchar(15) out -- LData4 Return Variable 
AS 
BEGIN 
    -- SP body 
END 

Чтобы использовать параметры в вашей C# код, который вы могли бы использовать пример:

Добавить параметр:

SqlParameter output = new SqlParameter("@L1R", SqlDbType.NVarChar); 
output.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(output); 

Прочитайте параметр:

string L1R = cmd.Parameters["@L1R"].Value.ToString(); 
+0

Я не могу настроить хранимую процедуру. Я попытался добавить во все 8 выходов как паразиты ... все еще не работал @ Krittner, как мне передать значение вместо paramenter, как вы сказали, я должен? –

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