当前位置:首页 » 存储配置 » mvc调用存储过程

mvc调用存储过程

发布时间: 2022-05-18 14:36:38

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

热点内容
oracle存储过程定义变量 发布:2024-09-21 10:30:42 浏览:382
预编译的作用 发布:2024-09-21 10:24:48 浏览:590
网页的访问量 发布:2024-09-21 10:14:46 浏览:146
压缩机阻 发布:2024-09-21 10:12:00 浏览:649
du查看文件夹大小 发布:2024-09-21 10:02:00 浏览:986
servuftpserver 发布:2024-09-21 09:58:51 浏览:387
迈腾引擎配置怎么样 发布:2024-09-21 09:39:33 浏览:592
怀孕骨算法 发布:2024-09-21 09:32:58 浏览:659
为啥哔哩哔哩缓存不了电影 发布:2024-09-21 09:23:56 浏览:487
c语言在 发布:2024-09-21 09:21:03 浏览:924