MVC+EF执行存储过程+事务,带output输出参数

这里不说太多存储过程的作用,直接开始。

这是我的存储过程,中间含有事务。

下面我们再项目中执行它

方法一:

                    //执行存储过程
                    Type t = typeof(string);
                    List<SqlParameter> listparam = new List<SqlParameter>();//参数集合
                    SqlParameter[] param = new SqlParameter[13];//参数数组
                    param[0] = new SqlParameter("@realName", Raia.realName);
                    param[1] = new SqlParameter("@idCard", Raia.IDCard);
                    param[2] = new SqlParameter("@phone", Raia.Phone);
                    param[3] = new SqlParameter("@sex", Raia.Sex);
                    param[4] = new SqlParameter("@adminID", AdminID);
                    param[5] = new SqlParameter("@productID", Raia.Name);
                    param[6] = new SqlParameter("@shopName", Raia.shopName);
                    param[7] = new SqlParameter("@shopImg", shopImg);
                    param[8] = new SqlParameter("@address", Raia.address);
                    param[9] = new SqlParameter("@opentime", Raia.openTime + "-" + Raia.closeTime);
                    param[10] = new SqlParameter("@consume", Raia.priceMin + "-" + Raia.priceMax);
                    param[11] = new SqlParameter("@grnre", Raia.genres);
                    param[12] = new SqlParameter("@outmsg", SqlDbType.NVarChar, 50);
                    param[12].Direction = ParameterDirection.Output;//指明为输出参数
                    listparam.Clear();
                    listparam.Add(param[0]);
                    listparam.Add(param[1]);
                    listparam.Add(param[2]);
                    listparam.Add(param[3]);
                    listparam.Add(param[4]);
                    listparam.Add(param[5]);
                    listparam.Add(param[6]);
                    listparam.Add(param[7]);
                    listparam.Add(param[8]);
                    listparam.Add(param[9]);
                    listparam.Add(param[10]);
                    listparam.Add(param[11]);
                    listparam.Add(param[12]);
                    var result = DB.Database.SqlQuery(t, "exec AddReal_Goods_Info @realName,@idCard,@phone,@sex,@adminID,@productID,@shopName,@shopImg,@address,@opentime,@consume,@grnre,@outmsg output", listparam.ToArray());
                    var outResult = param[12].Value.ToString();//接收返回参数

这是自己手写参数并加到list集合里面。加入前先清空集合。(不把参数数组添加到list里面可能会出现异常:另一个SqlParameterCollection中已包含SqlParameter)。然后用实体对象.Database.SqlQuery()执行。

方法二:

先把存储过程映射到实体在这里选择一个你的存储过程添加即可。由于我添加过了,直接下一步。添加后就会在实体类中多一个方法是不是很熟悉?这就是和我们方法一中写的哪些参数数组一样,这里映射后是VS自动给你写好参数。你只需调用这个方法即可:

                    Type t = typeof(string);//指定输出参数类型
                    ObjectParameter callback = new ObjectParameter("msg",t);//这里第二个参数t网上很多用DbType.String/SqlDbType.NVarChar,这样虽然编译不报错,但是运行时会报错数据类型转换错误,而且接收不到输出参数
                    var procResult = DB.AddReal_Goods_Info(Raia.realName,Raia.IDCard,Raia.Phone,Raia.Sex,AdminID,Raia.Name,Raia.shopName,shopImg,Raia.address,Raia.openTime+"-"+Raia.closeTime,Raia.priceMin+"-"+Raia.priceMax,Raia.genres,callback);            
                    var outResult = callback.Value.ToString();//获取输出参数

就此就分享到这里。欢迎大家指出问题,大家一起进步。(最近有些忙,文章写的比较仓促可能不是很详细,在此请大家多多包涵)

猜你喜欢

转载自blog.csdn.net/qq_39402334/article/details/84229353