`
baobeituping
  • 浏览: 1068006 次
  • 性别: 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结合存储过程的员工管理系统就是一个典型的案例,它利用.NET框架的强大功能与SQL Server数据库进行高效交互,实现了对员工信息的有效管理。下面我们将深入探讨Ado.NET与存储过程的相关知识点,以及如何在员工...

    ADO.Net数据库访问(代码示例)

    这个标题"ADO.Net数据库访问(代码示例)"暗示我们将深入探讨如何使用ADO.NET进行数据库的读取、写入和其他相关操作,并通过具体的代码示例来解释这些概念。 首先,ADO.NET的核心组件包括: 1. **DataSet**: 这是一...

    ADO.NET数据库访问技术案例教程

    进一步,教程会涉及ADO.NET的高级主题,如使用存储过程、数据映射(Entity Framework)以及异步数据库访问。存储过程可以提高性能,减少网络通信,并提供安全的数据库操作封装。数据映射工具如Entity Framework,...

    ADO.net数据访问存储

    **ADO.NET 数据访问存储** ADO.NET 是微软 .NET Framework 的一部分,它提供了一种高效、安全的方式,用于访问和操作关系型数据库。这个强大的数据访问技术允许开发人员直接与各种数据库进行交互,如 SQL Server、...

    学生管理系统+ADO.NET+SQL2005

    ADO.NET是微软.NET Framework中的数据访问组件,它提供了与数据库交互的强大功能。ADO.NET通过.NET Data Provider(如SQL Server Data Provider)连接到SQL Server 2005,实现了高效的数据存取。在这个学生管理系统...

    ADO.NET sql、LINQ to sql、ADO.NET Entity Framework(EF)数据库连接性能比较

    本文将深入探讨三种常见的.NET框架下的数据库访问技术:ADO.NET SQL、LINQ to SQL以及ADO.NET Entity Framework(EF),并重点分析它们在数据库连接性能上的差异,特别是在插入和读取操作,包括模糊检索方面的表现。...

    ADO.net大数据量操作数据库实验

    在ADO.NET中,可以创建一个DataTable对象,填充数据,然后将其作为参数传递给存储过程。 4. **ASP.NET**:虽然标签中提到了ASP.NET,但在这个实验中,ASP.NET主要作为前端开发框架,用于构建与数据库交互的Web应用...

    ADO.NET 4从入门到精通源代码

    ADO.NET 4是微软.NET Framework 4的一部分,它提供了一组用于访问数据库的类和接口。这个技术允许开发者高效地创建、操作和管理数据存储,无论是关系型数据库还是其他类型的数据源。本压缩包文件“ADO.NET 4从入门到...

    ADO.net操作数据库总结

    ADO.net 是 một 微软公司开发的数据库访问技术,用于与关系数据库管理系统(RDBMS)交互。以下是 ADO.net 操作数据库的总结,包括使用 SqlConnection 和 SqlCommand 对象连接数据库、执行查询语句等操作。 一、...

    ADO.NET访问数据库的原理、方法

    ADO.NET 访问数据库的原理和方法 ADO.NET 是微软公司推出的一个数据访问技术,允许开发人员使用 C# 或 VB.NET 等语言访问各种类型的数据库。ADO.NET 分为两个主要组件:ADO.NET 数据提供程序和 ADO.NET 数据集。 ...

    ADO.NET 全面解析ADO.NET

    ADO.NET是Microsoft开发的一种用于访问关系数据库的数据访问技术,它为.NET Framework应用程序提供了一套全面的数据访问组件。本文将深入探讨ADO.NET的核心概念、对象模型和数据操作。 首先,我们来看ADO.NET的设计...

    C#ado.net数据库操作封装

    在.NET框架中,ADO.NET是用于访问数据库的核心组件,它为开发者提供了强大的数据访问能力。在C#编程中,我们经常使用ADO.NET进行数据库交互,包括读取、写入、更新和删除数据。本主题将深入探讨如何通过C#封装ADO...

    ADO.NET数据访问技术习题参考答案

    ADO.NET是微软.NET框架中用于访问数据库的核心组件,它提供了高效、灵活且强大的数据存取能力。本资源“ADO.NET数据访问技术习题参考答案”是针对学习ADO.NET技术的学生或开发者的重要参考资料,包含了丰富的练习题...

    ado.net面试题

    ADO.NET 是微软为.NET Framework 设计的一种全新的数据库访问技术,它是对传统ADO(ActiveX Data Objects)的升级,旨在提供更高效、更易用的数据访问接口。ADO.NET 的设计核心是面向数据集而非数据库,这使得它更适合...

    《ADO.NET专业项目实例开发》源代码

    ADO.NET是微软.NET框架的一部分,主要用于访问和操作数据库。它为开发者提供了强大的数据访问接口,使得程序员能够高效地处理各种数据库任务,如查询、更新、插入数据等。本资源是《ADO.NET专业项目实例开发》一书的...

    使用ADO.NET访问数据库.zip

    总结起来,"使用ADO.NET访问数据库"的主题涵盖了C#与SQL Server数据库间的通信,通过理解并实践ADO.NET的核心组件和操作流程,开发者可以构建出高效且可靠的数据库应用程序。这个压缩包提供的案例和练习将帮助学习者...

    ADO.NET教程(适合新手)

    ADO.NET是微软.NET框架下的一种数据访问技术,用于与数据库进行交互。它是.NET应用程序与数据库之间通信的基础,提供了高效、灵活的数据处理能力。本教程专为初学者设计,旨在帮助新接触ADO.NET的开发者理解其核心...

    ADO.NET访问ACCESS

    ADO.NET访问ACCESS的一个常见任务是执行SQL查询。这可以通过创建一个SqlCommand对象并设置其CommandText属性来完成: ```csharp string sql = "SELECT * FROM 表名"; OleDbCommand command = new OleDbCommand(sql,...

    ADO.NET核心技术(我看过最好的ADO。NET书)

    ADO.NET是一组包含在.NET框架中的库,专门用于在.NET应用程序的各种数据存储之间进行通信。它不仅能够作为一个强大的、层次化的数据缓存来使用,还支持离线处理数据。对于需要访问数据的应用程序开发而言,ADO.NET是...

Global site tag (gtag.js) - Google Analytics