项目框架采用开源框架NFine进行二次扩展处理,要求支持调用存储过程进行处理返回datatable或者dataset进行判断存储过程是否执行完毕,需要进行判断处理。
在NFine框架中实现调用存储过程的功能
///
/// 调用存储参数
///
/// 存储过程的名称
/// 参数信息
/// 存储过程返回的表结构信息
///
public DataSet ExcuteProcedure(string produceName, SqlParameter[] sqlParameter, DataTable dt)
{
//定义一个返回DataSet的变量处理
DataSet ds = new DataSet();
//数据库连接声明
using (SqlConnection conn = dbcontext.Database.Connection as SqlConnection)
{
//打开数据库连接
conn.Open();
//创建一个执行命令
using (SqlCommand cmd = conn.CreateCommand())
{
//存储过程名
cmd.CommandText = produceName;
//命令执行的类型 是存储过程的
cmd.CommandType = CommandType.StoredProcedure;
//存储过程的参数信息
cmd.Parameters.AddRange(sqlParameter);
//执行参数信息
cmd.ExecuteNonQuery();
//传递过来的空表赋值
DataRow dr = dt.NewRow();
//定义的具有返回值的信息表信息
foreach (DataColumn dc in dt.Columns)
{
dr[dc.ColumnName] = cmd.Parameters["@"+ dc.ColumnName].Value.ToString();
}
//datatable 添加数据信息
dt.Rows.Add(dr);
//为返回的dataset进行赋值
ds.Tables.Add(dt);
}
}
return ds;
}
///
/// 执行存储过程返回信息
///
/// 存储过程的名字
/// 需要传递的参数实体信息
/// 返回执行存储过程的dataset
public DataSet ExcuteProcedure(string produceName, EmployeesEntity employ)
{
//定义一个空表 用户接收存储过程返回的表信息处理
DataTable dt = new DataTable();
//定义的类型必须保证存储过程的参数类型为ParameterDirection.Output或者ParameterDirection.InputOutput
dt.Columns.Add("ReturnValue", typeof(System.Int32));
dt.Columns.Add("ID", typeof(System.String));
//封装构造函数信息
SqlParameter[] sqlParameter = new SqlParameter[]{
new SqlParameter("@ReturnValue",SqlDbType.NVarChar, 2000, ParameterDirection.Output,false, 0, 0, string.Empty, DataRowVersion.Default, null),
new SqlParameter("@ID",SqlDbType.NVarChar, 2000, ParameterDirection.InputOutput,false, 0, 0, string.Empty, DataRowVersion.Default, employ.ygEmployeeID),
new SqlParameter("@Name",SqlDbType.NVarChar, 2000, ParameterDirection.Input,false, 0, 0, string.Empty, DataRowVersion.Default, employ.ygEmployeeName),
new SqlParameter("@Tel",SqlDbType.NVarChar, 2000, ParameterDirection.Input,false, 0, 0, string.Empty, DataRowVersion.Default, employ.cTel),
new SqlParameter("@Mobile",SqlDbType.NVarChar, 2000, ParameterDirection.Input,false, 0, 0, string.Empty, DataRowVersion.Default, employ.cMobile),
new SqlParameter("@Title",SqlDbType.NVarChar, 2000, ParameterDirection.Input,false, 0, 0, string.Empty, DataRowVersion.Default, employ.cTitle)
};
return service.ExcuteProcedure(produceName, sqlParameter, dt);
}
[HttpGet]
public ActionResult Test(){
//根据返回的dataset进行处理
new EmployeesApp().ExcuteProcedure("Sys_EmployeesInsert", employ);
}
主要是为了最核心的执行数据库存储过程 以及返回的类型如何填充对应的数据信息。
主要内容就介绍了这么多了。大家有使用NFine框架的开发的朋友们 可以看一下
估计这种情况适合企业框架正在从WebFrom转框架到MVC的项目中,或者更多的是一些朋友们自己写方法处理,继承ORM或者其他应用中