Devexpress GridControl wykonanie procedury składowanej SQL i wyświetlenie wyniku w GridControl

0

Witam,

Na wstępie dodam, że w C# jestem dopiero początkującym.

Chciałbym, aby przy pomocy C# wykonać procedurę składowaną SQL i następnie wyniki tej procedury wyświetlić w GridControl (każdy jako osobny wiersz oczywiście).

Pomoże mi ktoś ?

1

Ja Ci pomogę.

0

Łączenie z bazą danych odbywa się w klasie Db. Poniżej kod:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;

namespace TestProceduryGrid
{
    public partial class Db : DbContext
    {
        public Db(string con)
        
            :base($"data source=111.111.1.1\\Nazwa_serwera;initial catalog = {con}; User ID = xyz; Password=xyz")
        {

        }
        
    }
}
0

Procedura jest wywoływana bez parametrów. Jest wynik to string, poniżej screen z przykładem:
screenshot-20210613205558.png

0

Czy powyższe rozwiązania nie zadziałały?

0

Jest jeszcze klasa Model:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestProceduryGrid
{
    public class Model
    {
        public string Blad { get; set; }
    }
}

0

Procedura zwraca string i chcesz ja podpiąć do Grida czy zwraca jakieś dane lub błąd w string?

0

Procedura zwraca w wyniku tekst, który wyżej zamieściłem na screenie. Nazwa kolumny Blad jest przypadkowa. Tekst który jest widoczny na screenie składa się z numeru umowy oraz dwóch dat - pobieranych z bazy. Poniżej kod z procedury:

SELECT CONCAT('Umowa ', @NR_UM, ' posiada więcej niż jeden okres dla okresu ', @DATA_OD, ' - ', @DATA_DO) AS BLAD
0

Ogólnie to wygląda tak.

Wstawiasz komponent BindingSource na form bsErrors
Masz GridControl o nazwie np. grid1 Ustawiasz grid1.DataSource na bsErrors
Ustawiasz bsErrors.DataSource na swoją klasę Model (rozwijasz, opcja Add Project Data Source, wybierasz Object, Next, szukasz dll gdzie jest klasa Model i wybierasz tę klasę)

Wywołania procedury, jak w linku od @WeiXiao

var res = db.Database.SqlQuery<Model>("NAZWA PROCEDURY").FirstOrDefault(); // albo ToList() zamiast FirstOrDefault() jeśli zwracana jest lista
bsErrors.DataSource = res; //podpięcie do grida

Uwaga!
Jeśli procedura zwraca kilka datasetów, jak chyba u Ciebie, to tak nie zadziała bo odczyta tylko pierwszy dataset. Albo procedura powinna to wszystko skleić w jeden zbiór albo cos takiego

List<Model> models = new List<Model>(); // lista na dane zwracane z procedury
            using (var db = new DatabaseContext()) // // tu Twój db context
            using (var connection = db.Database.Connection)
            {
                connection.Open();

                var cmd = connection.CreateCommand();
                cmd.CommandText = "Test123"; // tu twoja nazwa procedury
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.HasRows)
                    {
                        var errs = ((IObjectContextAdapter)db).ObjectContext.Translate<Model>(reader).ToList();
                        models.AddRange(errs);
                        reader.NextResult();
                    }
                }
            }

i potem bsErrors.DataSOurce = models;

EDIT

Wymaga
using System.Data.Entity.Infrastructure;

1 użytkowników online, w tym zalogowanych: 0, gości: 1