Próbuję uzyskać zawartość tabeli z dynamiczną procedurą składowania SQL wywoływaną z obiektu kontekstowego bazy danych (przy użyciu Entity Framework 6.1.1) w celu zapełnienia formantu GridView
. Nie mogę odzyskać danych.Pobieranie danych z procedury składowanej za pomocą Entity Framework
Oto procedura składowana. Jest to pokaz dla studentów na temat iniekcji SQL w procedurach przechowywanych, więc można go wstrzykiwać i jest w porządku.
ALTER PROCEDURE dbo.SearchProducts
@SearchTerm VARCHAR(max)
AS
BEGIN
DECLARE @query VARCHAR(max)
SET @query = 'SELECT * FROM dbo.Products WHERE Name LIKE ''%' + @SearchTerm + '%'''
EXEC(@query)
END
kod C# za I wtedy użyć do wykonania procedury przechowywanej jest:
var db = new MyEntities();
var TEST_SEARCH_TERM = "product";
var result = db.SearchProducts(TEST_SEARCH_TERM);
MyGridView.DataSource = result;
MyGridView.DataBind();
Kiedy wykonywany w Eksploratorze bazy danych w Visual Studio, procedura przechowywana działa dobrze. Ale po uruchomieniu w uruchomionej aplikacji ASP.NET otrzymuję wyjątek w metodzie DataBind()
, ponieważ result
zwraca -1
zamiast z obiektu DataSet
zawierającego obiekty wynikłe z SELECT składowanej procedury.
Jak mogę odzyskać dane i wypełnić moją GridView
?
W pliku edmx przejdź do Import funkcji -> Wyszukaj produkty i kliknij go dwukrotnie. Do czego jest ustawiony typ zwrotu? – Vahlkron
Typ powrotu nie jest ustawiony. Jest (brak). – mak
Wygląda na to, że musi być ustawiony jako Complex. Jedyna rzecz, którą mógłbym zasugerować, ponieważ nie miałem EF, sprawiało mi problemy, gdy robię to, zmień *, aby wyraźnie wybrać kolumny, które chcesz w SP. Może EF przyjrzy się temu, aby określić twój typ zwrotu. Następnie zaktualizuj edytor EDMX, aby zmiany zostały odzwierciedlone w EF. – Vahlkron