2012-07-19 22 views
5

Esiste qualche esempio da trovare per l'esecuzione di una stored procedure su serviceStack MVC utilizzando ormlite? mythz? visto questo blocco di codice:esegue stored procedure nel proprio modello con servicestack omlite

var results = new List<EnergyCompare> 
        {dbFactory.Exec(dbCmd => 
         { 
          dbCmd.CommandType = CommandType.StoredProcedure; 
          dbCmd.Parameters.Add(new SqlParameter("@id", 1)); 
          dbCmd.CommandText = "GetAuthorById"; 
          return dbCmd.ExecuteReader().ConvertTo<EnergyCompare>(); 
         } 
        )}; 

ma è venuto con il testo di mai lavorato sui gruppi di google!

posso anche scrivere questo:

using(var db = new SwitchWizardDb()) 
      { 
      var results2 = db.dbCmd.ExecuteProcedure() 
      } 

ma non è sicuro come completare questo con i parametri, e nel codice sorgente ho guardato, ha detto obsoleto?

grazie

+0

Ho appena eseguito il primo esempio di procedura e non ho ottenuto risultati – davethecoder

risposta

2

Beh ho pensato che era meglio rotolare il mio gestore quindi hanno creato questo, tutti i pensieri sarebbero i benvenuti, soprattutto con come potrei passare sopra params in una sorta di func o qualcosa del genere:

ho una classe principale a che fare con un facile accesso al mio oggetto di connessione:

public class DatabaseNameSp : IDisposable 
{ 
    private readonly SqlConnection _spConn = new SqlConnection(DatabaseNameSp .dbConString); 
    public readonly SqlCommand SpCmd; 

    public DatabaseNameSp (string procedureName) 
    { 
     _spConn.Open(); 

     SpCmd = new SqlCommand 
        { 
         Connection = _spConn, 
         CommandType = CommandType.StoredProcedure, 
         CommandText = procedureName 
        }; 
    } 

    public void Dispose() 
    { 
     _spConn.Close(); 
     SpCmd.Dispose(); 
    } 
} 

utilizzo:

using (var db = new DatabaseNameSp ("procedurenname")) 
      { 
       db.SpCmd.Parameters.Add(new SqlParameter("@Id", 1)); 

       var rdr = db.SpCmd.ExecuteReader(CommandBehavior.CloseConnection); 

       var results = new List<CustomDTO>(); 
       while (rdr.Read()) 
       { 
        results.Add(new CustomDTO { Name = rdr["name"].ToString(), Id = rdr["id"].ToString() }); 
       } 
       return new CustomDTOResponse { Results = results }; 
      } 

Qualsiasi pensiero!

grazie

+0

qualsiasi risposta accettata merita un upvote, giusto? : D sta solo dicendo – AceMark

0

Ecco un esempio di esecuzione di una stored procedure con ormLite che possono aiutare:

IList<MyDTO> myList = DbFactory.Run(dbCnx => 
{ 
using (var dbCmd = dbCnx.CreateCommand()) 
{ 
     dbCmd.CommandType = CommandType.StoredProcedure; 
     dbCmd.CommandText = "mySchema.myStoredProc"; 
     dbCmd.Parameters.Add(new SqlParameter("@param1", val1)); 
     dbCmd.Parameters.Add(new SqlParameter("@param2", val2)); 

     var r = dbCmd.ExecuteReader(); 
     return r.ConvertToList<MyDTO>(); 
    } 
}); 
0

Per semplicemente eseguire una stored procedure senza dati restituiti:

public class ComsManager : Dbase 
{ 
    private IDbConnection dbConn; 

    public ComsManager() 
    { 
     dbConn = Dbase.GetConnection(); 
    } 

    public void Housekeeping() 
    { 
     using(var dbCmd = dbConn.CreateCommand()) 
      dbConn.Exec(res => { dbCmd.CommandType = CommandType.StoredProcedure; dbCmd.CommandText = "SP_housekeeping"; dbCmd.ExecuteNonQuery(); }); 
    } 
17

Sembra che ServiceStack.ORMLite sia stato aggiornato per semplificare la procedura:

List<Poco> results = db.SqlList<Poco>("EXEC GetAnalyticsForWeek 1"); 
List<Poco> results = db.SqlList<Poco>("EXEC GetAnalyticsForWeek @weekNo", new { weekNo = 1 }); 

List<int> results = db.SqlList<int>("EXEC GetTotalsForWeek 1"); 
List<int> results = db.SqlList<int>("EXEC GetTotalsForWeek @weekNo", new { weekNo = 1 }); 

Questo esempio è il front page of the github repo.

+1

questo funziona perfettamente – Edi

+0

Funziona, ma quando invio Nullable DateTimes invia NULL ai parametri o DateTime MinValue? @ZacharyYates –

+1

@RogerOliveira Sono abbastanza sicuro che manda NULL, ma non l'ho testato –

Problemi correlati