안녕하세요, 우리는 프로젝트에서 작업하고 저장 프로 시저를 호출하려고합니다. 해결책을 찾았지만 저장 프로 시저를 호출하는 방법을 찾지 못했습니다. 그래서 저장 프로 시저를 실행하는 방법을 알려주십시오.과수원 저장 프로 시저
1
A
답변
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/ISQLQuery
을 CreateSQLQuery()
으로 만듭니다. 여기
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();
을 사용할 수 있습니다, 모듈에 NHibernate에 및 System.Data를 참조해야합니다. –