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

しかし、Googleグループで働いたことがないというテキストが付属していました!

私はこれを書くこともできます:

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

まあ、私は自分のハンドラーをロールバックするのが最善だと考えたので、これを作成しました。

接続オブジェクトへの簡単なアクセスを処理するためのメイン クラスがあります。

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 に答える