C# NFine开源框架 调用存储过程的实现代码

前言

项目框架采用开源框架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;
        }

NFine架构仓储层或者应用层


        /// 
        /// 执行存储过程返回信息
        /// 
        /// 存储过程的名字
        /// 需要传递的参数实体信息
        /// 返回执行存储过程的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或者其他应用中

你可能感兴趣的:(后端,数据库访问,数据库查询)