EF 下使用存储过程方法集合

public void test() {
SqlParameter[] para = new SqlParameter[2];
para[0] = new SqlParameter("@typ", 1);
para[1] = new SqlParameter("@sc",SqlDbType.Int,0,ParameterDirection.Output,true,new byte(),new byte(),"",DataRowVersion.Default,0);

var e1 = WContext.Database.SqlQuery(typeof(string), "exec fnc @typ,@sc;", para);
para[0].Value = 3;
var e2 = WContext.Database.SqlQuery<article_contents>("exec fnc @typ,@sc;", para);
para[0].Value=5;
var e3 = WContext.Database.SqlQuery(typeof(int), "exec fnc @typ,@sc;", para);

para[0].Value = 4;
object er1 = "";
ExecByOutAndReturn(WContext, "fnc", para,out er1);
var tmp=er1.ToString();

object er2 = "";
SqlParameter[] para2 = new SqlParameter[3];
para[0].Value = 2;
para2[0] = para[0];
para2[1] = para[1];
para2[2] = new SqlParameter("@return", SqlDbType.Int, 0, ParameterDirection.ReturnValue, true, new byte(), new byte(), "", DataRowVersion.Default, 0);
ExecByOutAndReturn(WContext, "fnc", para2, out er2);

}

 

 public static void ExecByOutAndReturn( DbContext c, string sql,SqlParameter[] para,out object result)
       {
           var conn = c.Database.Connection;
           ConnectionState initialState = conn.State;
           try
           {   
               if (initialState != ConnectionState.Open)
                   conn.Open();  // open connection if not already open
               using (DbCommand cmd = conn.CreateCommand())
               {   
                   string outKey="";
                   foreach (var p in para) {
                       var Item = cmd.CreateParameter();
                       Item.ParameterName = p.ParameterName;
                       Item.DbType = p.DbType;
                       Item.Value = p.Value;
                       Item.Direction = p.Direction;
                       cmd.Parameters.Add(Item);
                       if(p.Direction!=ParameterDirection.Input){
                         outKey=p.ParameterName;
                       }
                   }
                   cmd.CommandType = CommandType.StoredProcedure;
                   cmd.CommandText = sql;
                   cmd.ExecuteNonQuery();
                   result = cmd.Parameters[outKey].Value;
                  
               }
           }
           finally
           {
               if (initialState != ConnectionState.Open)
                   conn.Close(); // only close connection if not initially open
           }
       }

 

posted @ 2014-04-09 00:32  wiphom.bear  阅读(185)  评论(0)    收藏  举报