`
baobeituping
  • 浏览: 1041401 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

ADO.NET 访问存储过程

    博客分类:
  • .NET
阅读更多

ADO.NET 访问存储过程其实也比较简单,但是有些小细节部分是需要注意的。

做了个小案例,演示在ADO.NET中如何调用存储过程。

数据库表结构代码如下:

CREATE TABLE TestTB( [ID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL, [Name] [nvarchar](50) NOT NULL, ) GO

存储过程代码如下:

CREATE PROCEDURE [dbo].[SelectAllProc] ( @inputData nvarchar, @outPutData int output ) AS declare @myCount int print @inputData select * from dbo.TestTB select @myCount=count(*) from dbo.TestTB set @outPutData=@myCount /* SET NOCOUNT ON */ RETURN @myCount GO

    该存储过程包含了输入参数、输出参数、select语句返回的结果集以及return返回的单个结果值。在ADO.NET调用的时候需要同时设置和获取这些值。

     界面部分使用的是ASP.NET MVC3来做。为了呈现数据的方便所以定制了两个Model类。分别是TestTB类和TestTBViewModel类。第一个类用于承载单个数据实体,第二个用于呈现界面的时候一次性的将数据传到界面呈现。

     Models部分的代码如下:

1 /// <summary> 2 /// 承载测试数据用的模型类 3 /// </summary> 4   public class TestTB 5 { 6 public int ID { get; set; } 7 public string Name { get; set; } 8 } 9 10 /// <summary> 11 /// 承载界面呈现数据的时候的模型类 12 /// 用于一次性将所有数据传递到界面 13 /// </summary> 14   public class TestTBViewModel 15 { 16 public TestTBViewModel() 17 { 18 this.TestTBList = new List<TestTB>(); 19 } 20 /// <summary> 21 /// TestTB实体集合 22 /// </summary> 23 public List<TestTB> TestTBList { get; set; } 24 /// <summary> 25 /// 存储过程return回来的值 26 /// </summary> 27 public int TotalCount { get; set; } 28 /// <summary> 29 /// 存储过程output回来的值 30 /// </summary> 31 public int TotalCount2 { get; set; } 32 }

    调用存储过程以及MVC控制器中的代码如下:

1 /// <summary> 2 /// 展示数据的Action 3 /// </summary> 4 /// <returns></returns> 5 public ActionResult ShowData() 6 { 7 return View(this.GetAllData()); 8 } 9 10 /// <summary> 11 /// 获取数据的方法 12 /// </summary> 13 /// <returns>返回用于界面呈现的模型</returns> 14 private TestTBViewModel GetAllData() 15 { 16 TestTBViewModel model = new TestTBViewModel(); 17 //创建数据库连接和命令对象并限定其使用范围(超过该范围则自动释放资源) 18 using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString)) 19 using (SqlCommand command = new SqlCommand()) 20 { 21 command.Connection = connection;//设置命令所使用的连接对象 22 command.CommandText = "dbo.SelectAllProc";//设置命令对象调用的存储过程的名称 23 command.CommandType = System.Data.CommandType.StoredProcedure;//设置该命令的类型为存储过程 24 25 //为命令对象添加参数,该参数名可以随便定义,用于接收存储过程return回来的值 26 SqlParameter pReturn = command.Parameters.Add("@aaa", System.Data.SqlDbType.Int); 27 //设置该参数的类型为返回值 28 pReturn.Direction = System.Data.ParameterDirection.ReturnValue; 29 30 //添加存储过程第一个参数,用于向存储过程输入值 31 SqlParameter pInput = command.Parameters.Add("@inputData", System.Data.SqlDbType.NVarChar); 32 //设置该参数的类型为输入参数 33 pInput.Direction = System.Data.ParameterDirection.Input; 34 //设置参数的值(因为该值在存储过程中只是print一下所以随便输入) 35 pInput.Value = "aaa"; 36 37 //添加存储过程第二个参数,用于接收存储过程输出参数的值 38 SqlParameter pOut = command.Parameters.Add("@outPutData", System.Data.SqlDbType.Int); 39 //设置该参数的类型为输出参数 40 pOut.Direction = System.Data.ParameterDirection.Output; 41 42 //打开数据库连接 43 connection.Open(); 44 //执行命令并获取反馈回来的读取流 45 //ExecuteReader的参数System.Data.CommandBehavior.CloseConnection的意思是关闭这个流的时候同时会关闭对应的连接对象 46 using (SqlDataReader dataReader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection)) 47 { 48 //循环读取流对象中的每行数据并将其添加到模型中 49 while (dataReader.Read()) 50 { 51 model.TestTBList.Add(new TestTB() 52 { 53 ID = dataReader.GetInt32(0), 54 Name = dataReader.GetString(1) 55 }); 56 } 57 } 58 59 //读取return、output回来的数据之前一定要关闭dataReader,否则读取不到值。 60 61 //读取存储过程return回来的值并保存到模型中 62 model.TotalCount = (int)pReturn.Value; 63 //读取存储过程output回来的值并保存到模型中 64 model.TotalCount2 = (int)pOut.Value; 65 } 66 67 return model; 68 }
    <SPAN style="COLOR: #ff0000; BACKGROUND-COLOR: #ffffff" color="#ff0000"><STRONG>一定要注意:读取return、output的数据必须先要关闭掉DataReader对象,否则不能获取到值。</STRONG></SPAN>

    界面部分使用了Razor模板来呈现。具体代码如下:

@model MvcApplication1.Models.TestTBViewModel @{ ViewBag.Title = "ShowData"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2> ShowData</h2> <p> @Html.ActionLink("Create New", "Create") </p> <table> <tr> <th> ID </th> <th> Name </th> </tr> @foreach (var item in Model.TestTBList) { <tr> <td> @item.ID </td> <td> @item.Name </td> </tr> } </table> <p> Count: @Model.TotalCount </p> <p> Count2: @Model.TotalCount2 </p>
分享到:
评论

相关推荐

    ADO.net数据访问存储

    熟悉ADO.NET数据库访问技术,掌握Command和DataAdapter对象操作数据库数据的方法。

    ADO.NET数据访问技术的PPT

    不管是Windows桌面应用程序,还是Web应用程序,存储和检索数据都是ADO.NET的核心功能。此PPT讲述ADO.NET的概念、概念和用法

    ado[1].net中文手册 学习 ado.net的重要资料

    通过 ADO.NET 访问数据 ADO.NET 概述 ADO.NET 的设计目标:讨论创建 ADO.NET 的动机和设计目标。 ADO.NET 结构:提供 ADO.NET 结构和组件的概述。 .NET 数据提供程序:提供有关随 ADO.NET 提供的 .NET 数据提供程序...

    基于ASP.NET的ADO与ADO.NET分析与研究

    探讨基于ASP.NET框架ADO和ADO.NET的两种数据库访问技术,并给出一个在ASP.NET下使用ADO.NET组件对数据库访问的实例。然后,对这两种技术在缓存中的数据集存储形式、脱机与连机关系、标准化程度、传输性能方面...

    ADO.NET 2.0技术内幕(高清 中文 带书签 全)

    本书介绍了如何用ADO.NET 2.0对独立应用、企业级应用和Web应用程序中的数据进行访问、排序和操作。作者针对如何利用Visual Studio 2005中的新工具和向导,编写、测试并调试数据库应用程序代码,用丰富的示例代码、...

    ADO.NET常用对象

    在ADO.NET结构中,常用的组件(对象)有五个,Connection对象、Command对象、DataReader对象、DataApdapter对象和DataSet对象,其中Connection对象、Command对象、DataReader对象,和DataApdapter对象被称为数据提供...

    思胜.NET高级培训ADO.NET部分学习视频(10集)

    资源名称:思胜.NET高级培训ADO.NET部分学习视频(10集)资源目录:【】adonet-1-数据库连接对象-Connection【】adonet-10-数据访问实现练习【】adonet-2-命令对象和事务对象【】adonet-3-访问存储过程-传入参数-...

    ADO.NET课件第一课

    不错的课件,和大家分享一下。。商业应用程序需要管理大量数据...ADO.NET 是 .NET 应用程序用来与数据库通讯的模型,用于检索、访问和更新数据。本模块将向想要在行业中作为数据库应用程序开发人员的学生提供必要的技能

    使用ADO.NET访问Oracle 9i存储过程 RAR

    共享源于乐趣,希望对你有用!!!!!!!!!!!!!!!!!!!!!!!!!!!

    ADO.NET ADO

    Command对象使你能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令;DataReader对象从数据源中提供高性能的数据流;DataAdapter对象提供连接DataSet对象和数据源的桥梁。

    ASP.NET中利用ADO.NET访问SQL/ORACLE/ACCESS数据库视频教程

    微软MVP邵志东老师的ADO.NET视频讲座,深入浅出,适合初级和中级.NET朋友学习。 • ADO.NET概述 • 数据绑定 • 数据操作 • 存储过程的使用(很好)

    ADO.NET数据访问基础

    ADO.NET数据访问基础,数据存储基础,数据库连接,常用ADO对象的使用

    ADO.net 数据访问层封装

    封装了数据访问常用的方法,包括数据源,查询,参数配置,存储过程等

    ADO.NET Entity Framework 教程

    中新增的数据访问层设计技术ADO.NET Entity Framework。ADO.NET的LINQ to Entity部分以LINQ  为基础,为了完整性本文档首先介绍LINQ技术 Entity Framework 教程 目录  预备知识 2  LINQ技术 2  LINQ...

    sheng.ADO.NET.Plus:对原生 ADO.NET 的增强和辅助类,使其具备类似 ORM 操作的便利性,当从数据库中读取数据时,对内存中的 DataSet、DataTable、DataRow 进行动态映射。当向数据库写入数据时,根据操作的对象自动生成 SQL 语句并执行 ADO.NET 层面相应的操作

    sheng.ADO.NET.Plus请访问原版代码库,以获得最新更新: MIT 协议开源,可以随意使用,但是需在源代码和产品关于画面保留版权声明和我的网站链接,谢谢。sheng.ADO.NET.Plus 是一个介于 Entity Framework 和直接使用 ...

    ADO.NET数据库访问技术综合篇

    教学内容:DataReader、DataSet、数据控件用法 教学重点:DataReader与数据库的高级操作 教学难点:DataReader访问数据库存储过程

    ADO.NET 3.5高级编程 第三部分.pdf

    第1章 使用ADO.NET3.5提供的新方法访问数据 第Ⅱ部分 LINQ简介 第2章 理解LINQ的体系结构和实现 第3章 使用LINQ to Objects执行LINQ查询表达式 第4章 使用高级查询操作符和表达式 第Ⅲ部分 使用领域相关的LINQ...

    ADO.NET数据访问技术.ppt

    数据库具有强大和灵活的后端管理与存储数据的能力,ADO.NET则是一个中间的数据访问层,ASP.NET通过ADO.NET来操作数据库。ADO.NET本身也是基于多层架构设计,除了能应用于普通的应用程序中之外,在分布式系统开发方面...

    ado.net 中文手册(html)

    使用dataview查看数据 使用dataview修改数据 使用dataview事件 使用dataviewmanager设置默认表视图据 从ado.net访问ado记录集或记录 ado.net方案示例 检索“标识”或“自动编号”值 ...

    使用Microsoft ADO.NET 访问数据-C#学习(3)

    描述 ADO.NET 对象模型 使用ADO.NET 连接数据源 使用DataSet和DataReader从数据库取得数据 使用DataGrid控件显示从数据库取得的数据 使用存储过程从数据库读取数据 把XML文件中的数据读入到数据集

Global site tag (gtag.js) - Google Analytics