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 } }

浙公网安备 33010602011771号