mvc调用存储过程
Ⅰ .net mvc 怎样调用 存储过程详细点最好有例子
由于问题主要是存储过程,以下例子的架构会直接点,Controller直接依赖sqlRepository,而未用到依赖注入。。
所以,架构方面千万不要参考了这个例子。。
费话不多说,先讲数据库。举例的数据库(SQLServer 2008)名为TestDB01,仅有的一张表表名为UserInfo,表有皆不可为空的三个字段,分别为UserID(int),UserName(nvarchar(50)),UserAge(smallint),其有一条记录为UserID:1,UserName:Lcng,UserAge22。
接下来是写在数据库里的存储过程,如下:
USE [TestDB01]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[myProcere] 
 @parameter1 int
AS
BEGIN
 SET NOCOUNT ON;
 SELECT * from [UserInfo] where [UserInfo].UserID = @parameter1 
END
希望我复制粘贴时没有出错,当然,如果你对存储过程熟悉的话你会发现我的错误,如果有的话。。
存储过程表达的意思在此就不说了(想你应该熟悉存储过程),如果需要,请补充问题。。
接下来就是Visual Studio 2010里的工作了。
新建一个空ASP.NET MVC 2项目,我取的项目名是UsingProcereInMVC,往项目里加一个名为Repositories的文件夹,此文件夹用来存放对数据库的操作的类,一会儿会讲,先看Models文件夹。
往Models文件夹里加一个名叫Person的类,Person类如下:
public class Person
    {
        public string PersonName { get; set; }
        public short PersonAge { get; set; }
    }
现在回到Repositories文件夹,往这个文件夹里加一个名叫SqlRepository的类,SqlRepository类如下:
public class SqlRepository
    {
        private List<Person> personList = new List<Person>();
        public List<Person> PersonList
        {
            get
            {
                return personList;
            }
        }
        public SqlRepository(string connectionString)
        {
            SqlConnection sqlconn = new SqlConnection(connectionString);
            SqlCommand sqlcmd = new SqlCommand("myProcere", sqlconn);
            sqlcmd.CommandType = CommandType.StoredProcere;
            SqlDataReader rd;
            try
            {
                sqlconn.Open();
                sqlcmd.Parameters.Add(new SqlParameter("@parameter1", SqlDbType.Int));
                sqlcmd.Parameters["@parameter1"].Value = 1;
                rd = sqlcmd.ExecuteReader();
                while (rd.Read())
                {
                    personList.Add(new Person { PersonAge = (short)rd[2], PersonName = rd[1].ToString() });
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                sqlconn.Close();
            }
        }
同样,希望我的复制粘贴没有出错。。
希望对于此类需要讲解的只有以下这些内容,如
SqlCommand sqlcmd = new SqlCommand("myProcere", sqlconn);
sqlcmd.CommandType = CommandType.StoredProcere;
如果你用过ASP.NET WebForm,那么对这两条中的第一条语句你应该很熟悉,相对于ASP.NET WebForm,SqlCommand sqlcmd = new SqlCommand("myProcere", sqlconn);只是把第一个参数由原来的SQL语句换成了定义在数据库里的存储过程的名字;而第二条语句只是告诉sqlcmd它的命令类型而已。
当然,我还要说的是,其实这根本就是在ASP.NET WebForm可以用的用法,只是我把它放到ASP.NET MVC里举例子了而已。。其实我们完全可以或说应当使用LINQ。。
还有两条要说的语句是
sqlcmd.Parameters.Add(new SqlParameter("@parameter1",SqlDbType.Int));
sqlcmd.Parameters["@parameter1"].Value = 1;
要说的是@parameter1就是定义存储过程里的那个参数,这里给这个参数的值为1,它完全可以根据你的需要而变。
接着看Controllers里的HomeController,它唯一的一个action就是Index(),定义如下
public ViewResult Index()
        {
            SqlRepository sr = new SqlRepository(WebConfigurationManager.ConnectionStrings["connectionString01"].ConnectionString);
            return View(sr.PersonList);
        }
如果对此有不明之处,请补充问题。。
最后是强类型(类型为List<UsingProcereInMVC.Models.Person>)的名叫Index的View,主要内容如下
<body>
    <div>
        <% foreach (var v in Model)
           { %>
                Name:<%: v.PersonName %><br />
                Age: <%: v.PersonAge %><br />
        <% } %>
    </div>
</body>
如果你按着这个例子做,显示的结果将会是
Name:Lc
Age: 22
祝你好运(当然,这条是不会显示的)。。
希望可以帮到你,如果还有疑问,请补充问题。
如果这对你有帮助,请标为最佳答案。
Ⅱ 在ASP.NET MVC中如何使用EF调用存储过程
要用EF调用存储过程,必须将这个存储过程拖拽到EF对应的文件中来,这样这个存储过程就自动变成了一个函数。例如存储p_GetProct。那么使用的时候
using(DataContext oDataContext=new DataContext())//EF对应的上下文对象
{
    oDataContext.p_GetProct();//直接通过这样调用就行了。当然,如果存储过程有参数,也可以通过这个函数传递参数。
}
希望可以帮到你。
Ⅲ MVC5加EF6 执行存储过程 获取表
zty_ABMXSFX 应该是你数据库里面对应的存储过程
EF会把存储过程映射为上下文中的一个方法, 起返回值为存储过程中SELECT出来的值或结果集合
Ⅳ mvc中怎样调用存储过程
像简单点的话。可以考虑在存储过程中多加一个参数在存储过程中进行判断好了。
数据库执行只会考虑登录数据库的权限问题。和登录系统的用户名是2回事。 
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
Ⅳ springmvc + mybatis 怎么调用存储过程
不知道怎么调用,但是可不可以在代码里实现存储过程所完成的功能啊,为什么要在数据库端进行操作
Ⅵ 求spring MVC + EXTJS + MSSQL 增删改不用自带的方法,直接带参数调用后台存储过程,请大侠提供例子
一、SpringMVC注解入门
1. 创建web项目
2. 在springmvc的配置文件中指定注解驱动,配置扫描器
Xml代码  
<!-- mvc的注解驱动 -->  
<mvc:annotation-driven />  
  
<!--只要定义了扫描器,注解驱动就不需要,扫描器已经有了注解驱动的功能 -->  
<context:component-scan base-package="org.study1.mvc.controller" />  
  
<!-- 前缀+ viewName +后缀 -->  
<bean  
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    <!-- WebContent(WebRoot)到某一指定的文件夹的路径 ,如下表示/WEB-INF/view/*.jsp -->  
    <property name="prefix" value="/WEB-INF/view/"></property>  
    <!-- 视图名称的后缀 -->  
    <property name="suffix" value=".jsp"></property>  
</bean>  
<context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有:
@Controller 声明Action组件
@Service    声明Service组件    @Service("myMovieLister") 
@Repository 声明Dao组件
@Component   泛指组件, 当不好归类时. 
@RequestMapping("/menu")  请求映射
@Resource  用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") 
@Autowired 用于注入,(srping提供的) 默认按类型装配 
@Transactional( rollbackFor={Exception.class}) 事务管理
@ResponseBody
@Scope("prototype")   设定bean的作用
3. @controller:标识当前类是控制层的一个具体的实现
4. @requestMapping:放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问。
java代码  
@Controller // 用来标注当前类是springmvc的控制层的类  
@RequestMapping("/test") // RequestMapping表示 该控制器的唯一标识或者命名空间  
public class TestController {  
  
    /** 
     * 方法的返回值是ModelAndView中的 
     */  
    @RequestMapping("/hello.do") // 用来访问控制层的方法的注解  
    public String hello() {  
        System.out.println("springmvc annotation... ");  
        return "jsp1/index";  
    }  
  
    //*****  
}  
在本例中,项目部署名为mvc,tomcat url为 http://localhost,所以实际为:http://localhos/mvc
在本例中,因为有命名空间 /test,所以请求hello方法地址为:http://localhost/mvc/test/hello.do
输出:springmvc annotation...
二、注解形式的参数接收
1. HttpServletRequest可以直接定义在参数的列表,通过该请求可以传递参数
url:http://localhost/mvc/test/toPerson.do?name=zhangsan
Java代码  
/** 
 * HttpServletRequest可以直接定义在参数的列表, 
 *  
 */  
@RequestMapping("/toPerson.do")  
public String toPerson(HttpServletRequest request) {  
    String result = request.getParameter("name");  
    System.out.println(result);  
    return "jsp1/index";  
}  
 可以从HttpServletRequest 取出“name”属性,然后进行操作!如上,可以取出 “name=zhangsan”
输出:zhangsan
2. 在参数列表上直接定义要接收的参数名称,只要参数名称能匹配的上就能接收所传过来的数据, 可以自动转换成参数列表里面的类型,注意的是值与类型之间是可以转换的
2.1传递多种不同类型的参数:
url:http://localhost/mvc/test/toPerson1.do?name=zhangsan&age=14&address=china&birthday=2000-2-11
Java代码  
/** 
 * 传递的参数的名字必须要与实体类的属性set方法后面的字符串匹配的上才能接收到参数,首字符的大小写不区分 
 * 请求中传的参数只要是能和参数列表里面的变量名或者实体里面的set后面的字符串匹配的上就能接收到 a 
 *  
 */  
@RequestMapping("/toPerson1.do")  
public String toPerson1(String name, Integer age, String address,  
             Date birthday) {  
           System.out.println(name + " " + age + " " + address + " " + birthday);  
           return "jsp1/index";  
}  
  
/** 
 * 注册时间类型的属性编辑器,将String转化为Date 
 */  
@InitBinder  
public void initBinder(ServletRequestDataBinder binder) {  
    binder.registerCustomEditor(Date.class, new CustomDateEditor(  
            new SimpleDateFormat("yyyy-MM-dd"), true));  
}  
输出:zhangsan 14 china Fri Feb 11 00:00:00 CST 2000
2.2传递数组:
url:http://localhost/mvc/test/toPerson2.do?name=tom&name=jack  
Java代码  
/** 
 * 对数组的接收,定义为同名即可  
 */  
@RequestMapping("/toPerson2.do")  
public String toPerson2(String[] name) {  
    for (String result : name) {  
        System.out.println(result);  
    }  
    return "jsp1/index";  
}  
 输出:tom jack
2.3传递自定义对象(可多个):
url:http://localhost/mvc/test/toPerson3.do?name=zhangsan&age=14&address=china&birthday=2000-2-11
 User 定义的属性有:name,age,并且有各自属性的对应的set方法以及toString方法
 Person定义的属性有:name,age.address,birthday,并且有各自属性的对应的set方法以及toString方法
Java代码  
/** 
 *  
 * 传递的参数的名字必须要与实体类的属性set方法后面的字符串匹配的上才能接收到参数,首字符的大小写不区分 
 * 请求中传的参数只要是能和参数列表里面的变量名或者实体里面的set后面的字符串匹配的上就能接收到  
 *  
 */  
@RequestMapping("/toPerson3.do")  
public String toPerson3(Person person, User user) {  
    System.out.println(person);  
    System.out.println(user);  
    return "jsp1/index";  
}  
  输出:
Person [name=zhangsan, age=14, address=china, birthday=Fri Feb 11 00:00:00 CST 2000]
User [name=zhangsan, age=14] 
自动封装了对象,并且被分别注入进来!
Ⅶ MVC中通过.edmx调用存储过程处理返回值
int r=0;
System.Data.Objects.ObjectParameter result = new System.Data.Objects.ObjectParameter("Result",System.Data.DbType.Int32);
movies.Movies_Create(Title, Convert.ToDateTime("ReleaseDate"), Genres_List, Price, Rating, result);
r=(int)result.Value;//r就是你所需要的返回值
Ⅷ mvc 怎么执行mysql里的存储过程
比方说你创建存储过程的语句如下:
create procere test_proc(count int)
那么执行存储过程的语句就是:
call test_proc(500);
Ⅸ 怎么在DAO层调用存储过程。
首先解释面上意思,service是业务层,是数据访问层。
呵呵,这个问题我曾经也有过,记得以前刚学编程的时候,都是在service里直接调用,service里面就new一个类对象,调用,其他有意义的事没做,也不明白有这个有什么用,参加工作久了以后就会知道,业务才是工作中的重中之重。
我们都知道,标准主流现在的编程方式都是采用mvc综合设计模式,mvc本身不属于设计模式的一种,它描述的是一种结构,最终目的达到解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。初期也许都是new对象去调用下一层,比如你在业务层new一个类的对象,调用类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是mvc的意义。
接下来说你感觉service的意义,其实因为你现在做东西分层次不是那么严格,在一个你们做东西业务本身也少,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。
再有不明白的追问,这是经验问题,呵呵,其实以后你就会懂。只是刚开始写的代码都是有个请求,我就去数据库取,业务几乎没有。
Ⅹ springmvc mybatis 存储过程怎么调用
mybatis  配置 里面 写好存储过程,然后直接调用。
编辑userMapper.xml
编辑userMapper.xml文件,添加如下的配置项
1 <!-- 
 2         查询得到男性或女性的数量, 如果传入的是0就女性否则是男性
 3      -->
 4     <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
 5         CALL mybatis.ges_user_count(?,?)
 6     </select>
 7     
 8     <!--
 9         parameterMap.put("sexid", 0);
10         parameterMap.put("usercount", -1);
11      -->
12     <parameterMap type="java.util.Map" id="getUserCountMap">
13         <parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
14         <parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
15     </parameterMap>
四、编写单元测试代码
1 package me.gacl.test;
 2 
 3 import java.util.HashMap;
 4 import java.util.List;
 5 import java.util.Map;
 6 
 7 import me.gacl.custom.model.ConditionUser;
 8 import me.gacl.domain.User;
 9 import me.gacl.util.MyBatisUtil;
10 import org.apache.ibatis.session.SqlSession;
11 import org.junit.Test;
12 
13 /**
14  * @author gacl
15  * 测试调用存储过程
16  */
17 public class Test6 {
18     
19     @Test
20     public void testGetUserCount(){
21         SqlSession sqlSession = MyBatisUtil.getSqlSession();
22         /**
23          * 映射sql的标识字符串,
24          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
25          * getUserCount是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
26          */
27         String statement = "me.gacl.mapping.userMapper.getUserCount";//映射sql的标识字符串
28         Map<String, Integer> parameterMap = new HashMap<String, Integer>();
29         parameterMap.put("sexid", 1);
30         parameterMap.put("usercount", -1);
31         sqlSession.selectOne(statement, parameterMap);
32         Integer result = parameterMap.get("usercount");
33         System.out.println(result);
34         sqlSession.close();
35     }
36 }
