2013-10-02 10 views
8

Qualcuno potrebbe guidarmi su come eseguire una stored procedure SQL Server in ASP.NET MVC/EF
applicazione e ottenere risultati indietro?Come eseguire la stored procedure e ottenere il risultato restituito in MVC/EF/LINQ

SQL Server stored procedure codice

CREATE PROCEDURE dbo.StoredProcedure2 AS 
    declare @parameter2 int 
    SET @parameter2 = 4 

    RETURN @parameter2 

MVC

private readonly TestDatastoreContext _context = new TestDatastoreContext(); 

public ViewResult Index(string id) 
{ 
     ViewData["EnvironmentId"] = id; 

     using (_context) 
     { 
      _context.Database.Connection.Open(); 
      var command = _context.Database.Connection.CreateCommand(); 
      command.CommandText = "dbo.StoredProcedure2"; 
      command.CommandType = System.Data.CommandType.StoredProcedure; 
      var test = (command.ExecuteScalar()); 
     } 

     var bigView = new BigViewModel 
     { 
      VersionsModel = _context.Versions.ToList(), 
      EnvironmentViewModel = _context.Environments.ToList(), 
     }; 

     return View(model: bigView); 
} 
+0

Si prega di spiegare ciò che si suppone il codice per farlo, ciò che fa realmente e quello che si hanno cercato di spiegare e annientare queste differenze. – CodeCaster

risposta

8

Il tuo problema è questo: si spedisce la valore dalla stored procedure (utilizzando RETURN @paramter2), ma il codice .NET tenta di leggere un set di risultati; qualcosa che sarebbe stato "restituito" utilizzando un'istruzione SELECT ..... all'interno della stored procedure

Quindi modificare la stored procedure per questo:

CREATE PROCEDURE dbo.StoredProcedure2 AS 
    declare @parameter2 int 
    SET @parameter2 = 4 

    SELECT @parameter2 

e quindi il codice .NET dovrebbe funzionare bene.

Il RETURN dichiarazione deve essere utilizzato per codici di stato solo e può restituire solo INT valori. Se si desidera utilizzare questo, si dovrà definire un SqlParameter per la stored procedure con un Direction.ReturnValue

4

controllare questo documento ufficiale su come mappare il Stored Procedure al Contesto:

Stored Procedures in the Entity Framework

.210

Dopo la mappatura sarete in grado di chiamare il Stored Procedure in questo modo:

var val = _context.StoredProcedure2(); 
+0

Funziona solo se si utilizza un file EDMX. Non funzionerà prima con il codice, che il richiedente non ha detto quale versione sta usando. –

+0

Ho pubblicato un collegamento che ha una buona utilità per lavorare prima con il codice. –

2

Una possibilità è quella di fare semplicemente questo:

MyReturnEntity ret = context.Database 
     .SqlQuery<MyReturnEntity>("exec myStoredProc ?, ?", param1, parm2); 
+0

non funziona: "Informazioni aggiuntive: sintassi errata vicino a '?'." – Teo

+0

@Teo Si riferisce al nome dei parametri nella procedura. –

0

È possibile utilizzare questa libreria: https://github.com/mrmmins/C-StoreProcedureModelBinding

restituisce i valori come un elenco, è sufficiente creare un semplice classe con i nomi e valori tipi, come:

var productos = DataReaderT.ReadStoredProceadures<MyCustomModel>(myDbEntityInstance, "dbo.MySPName", _generic); 

e la classe MyCumtomModel è qualcosa di simile:

public int id {get; set;} 
public int salary {get; set;} 
public string name {get; set;} 
public string school {get; set;} 

e generico come:

List<Generic> _generic = = new List<Generic> 
          { 
           new Generic 
            { 
             Key = "@phase", Type = SqlDbType.Int, Value = "207" 
            } 
          } 
         }; 

E ora, la tua products ha le opzioni come: products.First(), products.Count(), foreach ecc

Problemi correlati