Member 13674721 Ответов: 1

Как отобразить результат хранимой процедуры в представлении datagrid в VB.NET


У меня есть хранимая процедура, которая генерирует отчет о посещаемости (в sql server 2012).
теперь я должен выполнить эту хранимую процедуру с моего компьютера. VB.NET применение и отображение результатов в виде DataGrid. помогите мне, чтобы отобразить результат в виде компонента DataGrid на VB.

Это код хранимой процедуры:

<pre>USE [first_db]
GO

/****** Object:  StoredProcedure [dbo].[GET_ATTENDANCE]    Script Date: 22-02-2018 11:34:43 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[GET_ATTENDANCE]
@STARTDATE  DATETIME,
@ENDDATE    DATETIME
AS BEGIN

--Now generate dates between two dates by Common table expression . and store that values in one temporary table (#TMP_DATES) .
;WITH DATERANGE  AS
(
  SELECT DT =DATEADD(DD,0, @STARTDATE)
  WHERE DATEADD(DD, 1, @STARTDATE) <= @ENDDATE
  UNION ALL
  SELECT DATEADD(DD, 1, DT)
  FROM DATERANGE
  WHERE DATEADD(DD, 1, DT) <= @ENDDATE
)
SELECT * INTO #TMP_DATES
FROM DATERANGE


--As the Report columns (Dates) are dynamic ,  hence Columns (Dates) are concatenated   one by one  from Temporary table (#TMP_DATES) and store the value in a local variable . 
DECLARE @COLUMN VARCHAR(MAX)
SELECT @COLUMN=ISNULL(@COLUMN+',','')+ '['+ CAST(CONVERT(DATE , T.DT) AS VARCHAR) + ']'  FROM #TMP_DATES T

--After Pivot , some columns may be Null as data (here PRESENT_STATUS) not exists in pivot section    .Now  replace the Null values by 'N/A'  .

DECLARE @Columns2 VARCHAR(MAX)
SET @Columns2 = SUBSTRING((SELECT DISTINCT ',ISNULL(['+ CAST(CONVERT(DATE , DT) as varchar )+'],''A'') AS ['+CAST(CONVERT(DATE , DT) as varchar )+']' FROM #TMP_DATES GROUP BY dt FOR XML PATH('')),2,8000)

--Now declare one local variable to write the dynamic sql query .
DECLARE @QUERY VARCHAR(MAX)

--Here Right outer join is done to show the all dates from the temporary table

SET @QUERY = 'SELECT User_Id, ' + @Columns2  +' FROM
            (
                  SELECT  A.User_Id , B.DT AS DATE, A.STATUS FROM MarkA A RIGHT OUTER  JOIN #TMP_DATES B ON A.DATE=B.DT              
           ) X
            PIVOT
            (
                 MIN([STATUS])
                 FOR [DATE] IN (' + @COLUMN + ')
            ) P
            WHERE ISNULL(User_Id,'''')<>''''
            '

 EXEC (@QUERY)

 --Drop the  temporary table
      DROP TABLE #TMP_DATES
     
 END

GO


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

это код в vb:
Private Sub StartDatePicker_ValueChanged(sender As Object, e As EventArgs) Handles StartDatePicker.ValueChanged
        ' StartDate = Format(StartDatePicker.Value, "yyyy/mm/dd")
        sd = Date.Parse(StartDatePicker.Text)


    End Sub

    Private Sub EndDatePicker_ValueChanged(sender As Object, e As EventArgs) Handles EndDatePicker.ValueChanged
        'EndDate = Format(EndDatePicker.Value, "yyyy/mm/dd")
        ed = Date.Parse(EndDatePicker.Text)

    End Sub

Private Sub Show_Button_Click(sender As Object, e As EventArgs) Handles Show_Button.Click
        Try
            Dim dt As DataTable = New DataTable()


            Dim cmd As SqlCommand = New SqlCommand("GET_ATTENDANCE", connection)
            cmd.CommandType = CommandType.StoredProcedure

            cmd.Connection = connection


            
            cmd.Parameters.AddWithValue("@STARTDATE", sd)
            cmd.Parameters.AddWithValue("@ENDDATE", ed)

            connection.Open()
            Dim adp As New SqlDataAdapter(cmd)
            Dim ds As DataSet = New DataSet()
            cmd.ExecuteNonQuery()

            adp.Fill(ds, "GET_ATTENDANCE")


            DataGridView1.DataSource = ds.Tables(0)
            connection.Close()


        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try



        

    End Sub
End Class

У меня есть форма, которая выбирает дату начала и дату окончания у пользователя и отображает результат в виде таблицы данных.Но этот код не генерирует ни ошибки, ни исключения ?? Итак, что же мне делать (результаты не отображаются в datagridview)

Maciej Los

Вы уверены, что ваш ИП работает нормально? Не возвращает никаких данных, если выполнить его в MS SQL для управления студией?

Member 13674721

да он правильно выполняется в среде sql management studio и показывает желаемые результаты

Maciej Los

В следующий раз, пожалуйста, используйте виджет "ответить", если вы хотите сообщить мне о своем ответе.

Member 13674721

Извини !!я позабочусь об этом в следующий раз

Maciej Los

Не беспокойся. :)

1 Ответов

Рейтинг:
0

RDBurmon

попробовать это -
ниже приведен код спинета из моей программы, это прекрасно работает для меня

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		SqlCommand command = new SqlCommand();
		SqlDataAdapter adapter = new SqlDataAdapter();
		DataSet ds = new DataSet();
		int i = 0;
		string sql = null;
		string connetionString = "Data Source=.;Initial Catalog=pubs;User ID=sa;Password=*****";
		SqlConnection connection = new SqlConnection(connetionString);
		connection.Open();
		command.Connection = connection;
		command.CommandType = CommandType.StoredProcedure;
		command.CommandText = "EmployeeData";
		adapter = new SqlDataAdapter(command);
		adapter.Fill(ds);
		connection.Close();
		GridView1.DataSource = ds.Tables[0];
		GridView1.DataBind();
	}
}


Читайте также этот блог-
Привязка данных к представлению сетки с помощью SP

и этот тоже
Привязка представления сетки с помощью хранимой процедуры[^]


Member 13674721

Тем не менее, он не показывает результаты в виде таблицы данных .