DrgIonuţ Ответов: 2

Как получить результат хранимой процедуры с параметрами в C#?


У меня есть следующая хранимая процедура с параметрами:
USE [DBRapBreaza]
   GO
   /****** Object:  StoredProcedure [dbo].[PS_SpauOPompa]    Script Date: 1/10/2019 10:01:13 ******/
   SET ANSI_NULLS ON
   GO
   SET QUOTED_IDENTIFIER ON
   GO

   ALTER PROCEDURE [dbo].[PS_SpauOPompa]

   @DataStart datetime,
   @DataStop datetime,
   @val int
   AS
   BEGIN
   SET NOCOUNT ON;

   declare @sql NVARCHAR(max)
   declare @col1 varchar (25)
   declare @col2 varchar(25)
   declare @col3 varchar (25)
   declare @col4 varchar (25)
   declare @col5 varchar (25)
   declare @col6 varchar (25)

   set @col1='ID'
   set @col2='BREAZA_SPAU'+CONVERT(VARCHAR, @val)+'_EA'
   set @col3='BREAZA_SPAU'+CONVERT(VARCHAR, @val)+'_EQ'
   set @col4='BREAZA_SPAU'+CONVERT(VARCHAR, @val)+'_ore1'
   set @col5='BREAZA_SPAU'+CONVERT(VARCHAR, @val)+'_nivel'
   set @col6='DateTime'

   set @sql= 'select [ID], ' + @col2 + ',' + @col3 + ',' + @col4 + ',' + @col5 + ',' + @col6 + ' FROM [DBRapBreaza].[dbo].[TblSPAU'+CONVERT(VARCHAR, @val)+ '] WHERE DateTime between '''+CONVERT(VARCHAR(25), @DataStart,121)+ ''' and '''+CONVERT(VARCHAR(25), @DataStop,121)+''';'

   print @sql;


   EXEC sp_executesql
       @sql,
       N'@DataStart datetime, @DataStop datetime, @val int',
       @DataStart, @DataStop, @val;
   END
 --execute [PS_SpauOPompa] '2018-12-13 15:58:46.940', '2018-12-13 16:31:39.243', 40

Когда я выполняю его в Microsoft SQL Server Management, все в порядке. Результатом выполнения хранимой процедуры является:
Без названия — imgbb.com[^]
Я хочу получить эти результаты в C# с помощью элемента DataSet из Visual Studio. Когда я выбираю хранимую процедуру, ни один из столбцов не отображается в столбце данных (см. изображение ниже). против — imgbb.com[^]
Что я должен сделать, чтобы получить эти столбцы в C#? Заранее спасибо!

Что я уже пробовал:

Смотрите выше код, который я сделал до сих пор.

F-ES Sitecore

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

DrgIonuţ

Что вы подразумеваете под "установкой столбцов вручную"?

MadMyche

Не могли бы вы опубликовать код C#, вызывающий эту хранимую процедуру?

2 Ответов

Рейтинг:
1

RickZeeland

Смотрите примеры здесь: sql server - Как выполнить хранимую процедуру в программе C# - переполнение стека[^]
Есть набор данных пример внизу.


DrgIonuţ

Спасибо за ваш ответ, но моя проблема заключается в том, что я не понимаю, почему я не могу видеть результат хранимой процедуры в C#. Если я использую обычный запрос select, я могу видеть столбцы таблицы в DataSet. Но когда я использую select в строке @sql и выполняю его с помощью "EXEC sp_executesql @sql", я не получаю никакого столбца В наборе данных.

RickZeeland

Вы уверены, что используете cmd?CommandType = CommandType.Хранимая процедура; ?
В противном случае, пожалуйста, опубликуйте свой код C#.

Рейтинг:
0

Wendelius

Если я правильно понял ваш вопрос, у вас еще нет никакого кода C#. Если это так, то самый простой способ-использовать Класс SqlDataAdapter (System.Data.SqlClient) | Microsoft Docs[^] для заполнения Таблицы данных результатами хранимой процедуры.

Для получения примеров о коде, взгляните на c# - Как заполнить DataTable из хранимой процедуры - переполнение стека[^]


DrgIonuţ

Спасибо за ваш ответ, но моя проблема заключается в том, что я не понимаю, почему я не могу видеть результат хранимой процедуры в C#. Если я использую обычный запрос select, я могу видеть столбцы таблицы в DataSet. Но когда я использую select в строке @sql и выполняю его с помощью "EXEC sp_executesql @sql", я не получаю никакого столбца В наборе данных.

Wendelius

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