2012-07-19 15 views
5

¿Hay algún ejemplo que se encuentre para ejecutar un procedimiento almacenado en serviceStack MVC usando ormlite? ¿Mitz? visto este bloque de código:ejecutando procedimientos almacenados en el propio modelo con servicestack ormlite

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>(); 
         } 
        )}; 

pero vino con el texto de nunca funcionó en los grupos de google!

también puedo escribir esto:

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

pero no sabe cómo llevar a cabo esto con parámetros, y en el código fuente Miré, que dicho obsoleto?

gracias

+0

Acabo de ejecutar el primer ejemplo de procedimiento y no obtuve ningún resultado – davethecoder

Respuesta

2

Bueno, yo pensé que era mejor para rodar mi propio manejador de modo han creado esto, cualquier pensamiento sería muy bienvenido, especialmente con la forma en que podía pasar por encima params en una especie de func o algo:

tengo una clase principal que lidiar con fácil acceso a la conexión de objetos:

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(); 
    } 
} 

uso:

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 }; 
      } 

¡Cualquier idea!

gracias

+0

ninguna respuesta aceptada merece un voto favorable, ¿verdad? : D acaba de decir – AceMark

0

He aquí un ejemplo de ejecución de un procedimiento almacenado con ormLite que pueden ayudarle a:

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

Para simplemente ejecuta un procedimiento almacenado con no devolvió datos:

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

Parece que ServiceStack.ORMLite se ha actualizado para que sea más fácil:

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 }); 

Este ejemplo está en el front page of the github repo.

+1

este funciona muy bien – Edi

+0

Funciona, pero cuando envío Nullable DateTimes ¿envía NULL a los parámetros o DateTime MinValue? @ZacharyYates –

+1

@RogerOliveira Estoy bastante seguro de que envía NULL, pero no lo he probado –

Cuestiones relacionadas