2014-12-05 1 views
1

안녕하세요, 우리는 프로젝트에서 작업하고 저장 프로 시저를 호출하려고합니다. 해결책을 찾았지만 저장 프로 시저를 호출하는 방법을 찾지 못했습니다. 그래서 저장 프로 시저를 실행하는 방법을 알려주십시오.과수원 저장 프로 시저

+0

을 사용할 수 있습니다, 모듈에 NHibernate에System.Data를 참조해야합니다. –

답변

0

어떻게 마침내 저장 프로 시저를 실행하고 결과를 얻으려면 아래 코드를 사용하고 있습니다.

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress)) 
     { 
      // temporary scope for new connection and setting stored procedure, parameters, and return RecordName list        
      using (SqlConnection cn = new SqlConnection(_settingsManager.LoadSettings().First().DataConnectionString)) 
      { 
       if (cn.State == ConnectionState.Closed) 
       { 
        cn.Open(); 
       } 
       const string storedProcedure = "usp_spName"; 
       SqlCommand cmd = new SqlCommand(storedProcedure, cn); 
       cmd.Parameters.AddWithValue("@IsVerified", "value"); 
       cmd.Parameters.AddWithValue("@page", "value"); 
       // for out put parameter 
       cmd.Parameters.AddWithValue("@totalRows", 0); 
       cmd.Parameters["@totalRows"].Direction = ParameterDirection.Output; 
       cmd.CommandType = CommandType.StoredProcedure; 
       IDataReader reader = cmd.ExecuteReader(); 
       while (reader.Read()) 
       { 
        // To Get The Values of the result 
        int id=Convert.ToInt32(reader["Id"].ToString()); 
       } 
       reader.Close(); 
       try 
       { 
        // To Get the Out Put Perameter 
        totalRecords = (int)cmd.Parameters["@totalRows"].Value; 
       } 
       catch 
       { 
        totalRecords = 0; 
       } 
       cmd.Parameters.Clear(); 
       cmd.Dispose(); 
       cn.Close(); 
      } 
     } 
0

실제로 저장 프로 시저에 대해서는 알지 못하지만 아래의 examaple과 같은 코드를 사용하여 저장 함수를 호출 할 수 있습니다. 저는 C#과 과수원을 처음 접했으므로, 제 접근법이 정확하고 충분하지 않을 수 있습니다. 처음에는 IOrchardServices을 사용하여 ISessionLocator 객체 인스턴스를 얻은 다음 NHibernate ISession 인스턴스를 만들고 IQuery/ISQLQueryCreateSQLQuery()으로 만듭니다. 여기

Services 클래스의 예제 코드입니다

public class ExampleService { 
    private readonly IOrchardServices _oServices;   

    public EParamsServices(IOrchardServices oServices) { 
     _oServices = oServices; 
    } 

    public float GetRegionPopulationDencity(int rId){ 

     //resolve ISession locator (you can do this using dependencies in ctor) 
     ISessionLocator sl = _oServices.WorkContext.Resolve<ISessionLocator>();    

     //create session 
     ISession _session = sl.For(null); 

     // create raw SQL query 
     return _session.CreateSQLQuery(@"SELECT data.RegionDencity(:rId) as result") 
         .AddScalar("result", NHibernateUtil.Single) 
         .SetParameter<int>("rId", rId) 
         .List<float>() 
         .FirstOrDefault<float>();    
    } 

} 

난 그냥 SQL 코드를 변경, 저장 발동 같은 방법으로 간부 인 수 있다고 생각 (나는이 부분에서 확실하지 않다 exec yourProcName 할 대신 List() 방법의 ExecuteUpdate())

당신은 또한 당신의 프로젝트에 NHibernate 어셈블리에 대한 참조를 추가해야하고 using 부분에 NHibernate & Orchard.Data를 추가합니다.

0

당신은 당신이 내 대답은 아래를 확인 아래 코드

var cmd = _transactionManager.GetSession().Connection.CreateCommand(); 

cmd.CommandType = System.Data.CommandType.StoredProcedure; 
cmd.CommandText = "MyStoredProcedure"; 

_transactionManager.GetSession().Transaction.Enlist(cmd); 

cmd.ExecuteNonQuery();