7

有没有使用 ormlite 在 serviceStack MVC 上运行存储过程的示例?神话?看到这段代码:

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

但附带了从未在谷歌群组工作过的文字!

我也可以这样写:

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

但不确定如何使用参数完成此操作,并且在我查看的源代码中,它说已过时?

谢谢

4

4 回答 4

23

看起来 ServiceStack.ORMLite 已经更新以使这更容易:

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

这个例子在 github repo 的首页

于 2013-02-27T23:56:51.683 回答
3

好吧,我认为最好滚动我自己的处理程序,所以创建了这个,任何想法都会受到欢迎,特别是我如何在某种 func 或其他东西中传递参数:

我有一个主类来处理对我的连接对象的轻松访问:

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

用法:

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

有什么想法吗 !

谢谢

于 2012-07-20T07:49:11.253 回答
0

这是一个使用 ormLite 运行存储过程的示例,可能会对您有所帮助:

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>();
  }
 });
于 2012-07-29T18:14:37.483 回答
0

只是简单地运行一个不返回数据的存储过程:

 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(); });
    }
于 2012-11-13T11:36:45.983 回答