2015-06-02 3 views
2

я создаю форму ASPX генератор из хранимой процедуры, я хранимую процедуру, какЧтение результата набор данных из хранимой процедуры

CREATE PROCEDURE [dbo].[OU_Test_ALL] 
@ID_Login uniqueidentifier = null, 
@ID int = null 
AS 
BEGIN 

declare @Error int, @Message varchar(500), @SQL varchar(max) 
set @Message = 'Error' 

exec @Error=dbo.CheckPermissions @[email protected]_Login, @[email protected], @ID_Action='OU_Test_ALL' 
begin 
    goto FAILED 
end 

select 
     OU_Test.Value1Int, 
     OU_Test.Value2Varchar, 
     OU_Test.Value3Bit, 
     OU_Test.Value4Varchar, 
     OU_Test.Value5Int 
from OU_Test 
where (@ID is null or [email protected]) 

return 0 

FAILED: 
raiserror (@Message, 16, 1) 
return 1 

END 

и мне нужно прочитать результат, не вызывая его.

Я был в состоянии получить некоторые метаданные в Management Studio с помощью

SET FMTONLY ON; 
exec OU_Test_ALL 
SET FMTONLY OFF; 

, но я не могу читать эти метаданные в моей C# приложение.

Есть ли способ прочитать столбцы результатов без вызова хранимой процедуры?

+0

Добро пожаловать в StackOverflow. Пожалуйста, прочитайте [ask]. Подсказка: ваш вопрос не очень ясен - что вы хотите сделать? –

+0

Я просто хочу прочитать возможные выходные столбцы (Value1Int, Value2Varchar, ...) и его тип данных без вызова процедуры. –

ответ

0

Это как назвать ваш stored procedure:

SqlCommand command = new SqlCommand("SET FMTONLY ON; exec sp_sptest; SET FMTONLY OFF;" 
             , connection); 

    command.Connection.Open(); 

    var reader = command.ExecuteReader(); 
    DataTable resultTable = new DataTable(); 
    resultTable.Load(reader); 

    command.Connection.Close(); 

Колонны поданы, и вы можете увидеть типы столбцов, имена и т.д. Строки не заполняются.

0

Я бы предложил использовать метод SqlDataReader.GetSchemaTable. Вызовите свою сохраненную процедуру, используя SET FMTONLY ON;, и структура будет доступна в DataTable, возвращенной GetSchemaTable().

Или ExecuteReader метод SqlCommand имеет перегрузку, которая обрабатывает SET FMTONLY для вас, если вы передаете в CommandBehavior из SchemaOnly.

Что-то вдоль линий:

SqlDataReader _Reader = null; 

_Reader = _Command.ExecuteReader(CommandBehavior.SchemaOnly); 
DataTable _Schema = _Reader.GetSchemaTable(); 
Смежные вопросы