Sto cercando di ottenere il contenuto una tabella con una procedura SQL memorizzata dinamica chiamata dall'oggetto contesto del database (utilizzando Entity Framework 6.1.1), per popolare un controllo GridView
. Non riesco a recuperare i dati.Ottenere dati dalla stored procedure con Entity Framework
Ecco la procedura memorizzata. È per una dimostrazione da parte degli studenti di SQL injection in stored procedure, quindi I KNOW è iniettabile e va bene.
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
Il codice C# dietro Ho quindi utilizzare per eseguire la stored procedure è:
var db = new MyEntities();
var TEST_SEARCH_TERM = "product";
var result = db.SearchProducts(TEST_SEARCH_TERM);
MyGridView.DataSource = result;
MyGridView.DataBind();
Quando viene eseguito, in Esplora database in Visual Studio, la stored procedure funziona bene. Ma quando viene eseguito nell'app ASP.NET in esecuzione, ottengo un'eccezione nel metodo DataBind()
perché result
restituisce -1
anziché IEnumerable
DataSet
contenente gli oggetti risultanti dal SELECT della procedura memorizzata.
Come posso recuperare i dati e compilare il mio GridView
?
In edmx, andare su Function Imports -> SearchProducts e fare doppio clic su di esso. A cosa è impostato il tipo di ritorno? – Vahlkron
Il tipo di ritorno non è impostato. È (Nessuno). – mak
Sembra che debba essere impostato su Complesso. L'unica cosa che potrei suggerire, dato che non ho avuto EF mi dà problemi quando lo faccio, cambia * per selezionare esplicitamente le colonne che vuoi nel SP. Forse EF la guarda per determinare il tuo tipo di ritorno. Quindi aggiorna il tuo EDMX in modo che le modifiche si riflettano in EF. – Vahlkron