您好我们正在开发一个项目,我正在尝试调用存储过程。我已经搜索了解决方案,但我没有找到任何方法来调用存储过程,所以任何人都可以告诉我如何执行存储过程。
答案 0 :(得分:1)
我怎么最终使用下面的代码来执行存储过程并获得结果。
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();
}
}
答案 1 :(得分:0)
实际上,我不知道存储过程,但您可以使用下面的examaple代码调用存储的函数。我是C#和果园的新手,所以我的方法可能不正确也不够好。首先,您应该使用ISessionLocator
获取IOrchardServices
对象实例,然后创建NHibernate ISession
实例,然后使用IQuery/ISQLQuery
创建CreateSQLQuery()
。
这里是Services
class
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
和ExecuteUpdate()
而不是List()
方法(我不确定这部分)
您还应该在项目中添加对NHibernate
程序集的引用,并添加NHibernate
&amp; Orchard.Data
部分using
。
答案 2 :(得分:0)
您必须在模块中引用 NHibernate 和 System.Data ,然后才能使用以下代码
var cmd = _transactionManager.GetSession().Connection.CreateCommand();
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "MyStoredProcedure";
_transactionManager.GetSession().Transaction.Enlist(cmd);
cmd.ExecuteNonQuery();