使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
使用 DataReader 返回行和参数
使用 Command 对象的 ExecuteScalar 方法
使用 Command 对象的 ExecuteNonQuery 方法
概要
有多种方法使用 ADO.NET 调用存储过程并获得返回值和返回参数,其中包括:
使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
使用 DataReader 对象收集返回的行,遍历这些行,然后收集返回值和返回参数。
使用 ExecuteScalar 方法返回结果中第一行的第一列的值以及返回值和返回参数。这对于聚合函数特别有用。
使用 ExecuteNonQuery 方法只返回参数和值。任何返回的行都将被丢弃。这对于执行操作查询特别有用。
 
本文演示后三种方法,并使用 SqlCommandOleDbCommand 这两个对象。在本文的每个示例中,这些参数都被添加到 Command 对象的 Parameters 集合中。使用 SqlCommand 对象时,您不必按照任何特定的顺序添加参数,但必须保证参数名正确。使用 OleDbCommand 对象时,必须按照正确的顺序添加参数,不能按照名称使用参数。

回到顶端

使用 DataReader 返回行和参数

您可以使用 DataReader 对象返回只读的仅向前型数据流。DataReader 中所包含的信息可以来自一个存储过程。本示例使用 DataReader 对象运行带有输入和输出参数的存储过程,然后遍历返回记录,以查看返回参数。
1.在运行 Microsoft SQL Server 的服务器上创建下面的存储过程:
Create Procedure TestProcedure
(
  @au_idIN varchar (11),
  @numTitlesOUT Integer OUTPUT
)
AS 

select A.au_fname, A.au_lname, T.title 
from authors as A join titleauthor as TA on
A.au_id=TA.au_id
join titles as T
on T.title_id=TA.title_id
where A.au_id=@au_idIN
set @numTitlesOUT = @@Rowcount
return (5) 
					
2.新建一个新的 Visual C# .NET Windows 应用程序项目。
3.SystemSystem.Data 命名空间使用 using 语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。将此代码添加到“窗体”代码模块的顶部。请确保只复制对应于您所选的提供程序的代码。SQL 客户端
using System.Data.SqlClient;
4.用以下代码替换 private Form_Load 事件中的代码:SQL 客户端
SqlConnection PubsConn = new SqlConnection 
("Data Source=server;integrated " + 
"Security=sspi;initial catalog=pubs;");
SqlCommand testCMD = new SqlCommand 
("TestProcedure", PubsConn);

testCMD.CommandType = CommandType.StoredProcedure;

SqlParameter RetVal = testCMD.Parameters.Add 
   ("RetVal", SqlDbType.Int);
RetVal.Direction = ParameterDirection.ReturnValue;
SqlParameter IdIn = testCMD.Parameters.Add 
  ("@au_idIN", SqlDbType.VarChar, 11);
IdIn.Direction = ParameterDirection.Input;
SqlParameter NumTitles = testCMD.Parameters.Add 
   ("@numtitlesout", SqlDbType.VarChar, 11);
NumTitles.Direction = ParameterDirection.Output ;
        
IdIn.Value = "213-46-8915";
PubsConn.Open();

SqlDataReader myReader = testCMD.ExecuteReader();
Console.WriteLine ("Book Titles for this Author:");
while (myReader.Read()) 
   {
     Console.WriteLine ("{0}", myReader.GetString (2));
   };
myReader.Close() ;
Console.WriteLine("Number of Rows: " + NumTitles.Value );
Console.WriteLine("Return Value: " + RetVal.Value);
5.修改 Connection 对象的连接字符串,以便指向运行 SQL Server 的计算机。
6.运行上述代码。注意,DataReader 检索记录并返回参数值。可以使用 DataReader 对象的 Read 方法遍历返回的记录。

“输出”窗口显示两本书的标题、返回值 5 和输出参数,其中包含记录的数目 (2)。注意,必须关闭代码中的 DataReader 才能看到参数值。另外还要注意,如果关闭了 DataReader,则不必为了查看返回参数而遍历所有记录。

使用 Command 对象的 ExecuteScalar 方法

可以使用 Command 对象的 ExecuteScalar 方法检索参数值。另外,ExecuteScalar 返回该存储过程的第一行的第一列。这对于聚合函数特别有用,如下例所示。
1.在运行 SQL Server 的服务器上创建下面的存储过程:
Create Procedure TestProcedure2
(
  @au_idIN varchar (11)
)
As
/* set nocount on */ 
select count (T.title) 
from authors as A join titleauthor as TA on
A.au_id=TA.au_id
join titles as T
on T.title_id=TA.title_id
where A.au_id=@au_idIN
Return(5)
					
2.新建一个新的 Visual C# .NET Windows 应用程序项目。
3.SystemSystem.Data 命名空间使用 using 语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。将此代码添加到“窗体”代码模块的顶部。请确保只复制对应于您所选的提供程序的代码。SQL 客户端
using System.Data.SqlClient;
4.将下面的代码添加到 Form_Load 事件:SQL 客户端
string strCount;
SqlConnection PubsConn = new SqlConnection 
   ("Data Source=server;integrated " + 
   "Security=sspi;initial catalog=pubs;");
SqlCommand testCMD = new SqlCommand 
   ("TestProcedure2", PubsConn);

testCMD.CommandType = CommandType.StoredProcedure;

SqlParameter RetVal = testCMD.Parameters.Add 
   ("RetVal", SqlDbType.Int);
RetVal.Direction = ParameterDirection.ReturnValue;
SqlParameter IdIn = testCMD.Parameters.Add 
   ("@au_idIN", SqlDbType.VarChar, 11);
IdIn.Direction = ParameterDirection.Input;
        
IdIn.Value = "213-46-8915";

PubsConn.Open();

strCount =testCMD.ExecuteScalar ().ToString() ;

Console.WriteLine("Number of Rows: " + strCount );
Console.WriteLine("Return Value: " + RetVal.Value);
5.修改 Connection 对象的连接字符串,以便指向运行 SQL Server 的计算机。
6.运行上述代码。注意,Command 对象的 ExecuteScalar 方法将返回参数。ExecuteScalar 还将返回所返回的行集中的第一行第一列的值。因此,intCount 的值是存储过程的 count 函数的结果。

使用 Command 对象的 ExecuteNonQuery 方法

此示例使用 ExecuteNonQuery 方法运行查询并返回参数值。ExecuteNonQuery 还返回在运行此查询后受影响的记录数。但是,ExecuteNonQuery 不从该存储过程返回任何行或列。

如果只需要知道更改的行数,那么在使用 INSERT、UPDATE 或 DELETE 语句时,ExecuteNonQuery 方法特别有用。当存储过程中仅使用 SELECT 语句时,您将收到 -1,因为查询不会影响任何行。
1.在运行 SQL Server 的计算机上创建下面的存储过程:
Create Procedure TestProcedure3
(
  @au_idIN varchar (11),
  @au_fnam varchar (30)
)

As
/* set nocount on */ 
Update authors set au_fname = @au_fnam
where au_id = @au_idin	
return (5)
					
2.新建一个新的 Visual C# .NET Windows 应用程序项目。
3.SystemSystem.Data 命名空间使用 using 语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。将此代码添加到“窗体”代码模块的顶部。请确保只复制对应于您所选的提供程序的代码。SQL 客户端
using System.Data.SqlClient;
4.用以下代码替换 Form1 代码模块中 private Form1_Load 事件后面的代码:SQL 客户端
string strRowAffect;
SqlConnection PubsConn = new SqlConnection 
   ("Data Source=server;integrated Security=sspi;" + 
   "initial catalog=pubs;");
SqlCommand testCMD = new SqlCommand 
   ("TestProcedure3", PubsConn);

testCMD.CommandType = CommandType.StoredProcedure;

SqlParameter RetVal = testCMD.Parameters.Add 
   ("RetVal", SqlDbType.Int);
RetVal.Direction = ParameterDirection.ReturnValue;
SqlParameter IdIn = testCMD.Parameters.Add 
   ("@au_idIN", SqlDbType.VarChar, 11);
IdIn.Direction = ParameterDirection.Input;
SqlParameter FnameIn = testCMD.Parameters.Add 
   ("@au_fnam", SqlDbType.VarChar, 30);
FnameIn.Direction = ParameterDirection.Input;

IdIn.Value = "213-46-8915";
FnameIn.Value = "Marjorie";

PubsConn.Open();

strRowAffect =testCMD.ExecuteNonQuery ().ToString() ;

Console.WriteLine("Number of Rows: " + strRowAffect );
Console.WriteLine("Return Value: " + RetVal.Value);
5.修改 Connection 对象的连接字符串,以便指向运行 SQL Server 的计算机。
6.运行上述代码。“输出”窗口显示受影响的行数 (intRowAffect) 和返回参数的值。
 
ado.net oledb 调用oracle存储过程返回结果集 数据库脚本:   CREATE TABLE DEPT   (DEPTNO NUMBER(2,0) NOT NULL,    DNAME VARCHAR2(14) NULL,    LOC VARCHAR2(13) NULL,   PRIMARY KEY (DEPTNO)   );   INSERT INTO Dept VALUES(11,Sales,Texas);   INSERT 阅读详情

相关推荐

官方水晶报表 .NET 应用程序实例下载 (C#Visual C++.NET)

水晶报表使用 C# C++.NET 开发的 .NET 应用程序实例列表----------------------------------概述本文档列出了 Crystal Decisions 技术支持网站上所有可用的,使用 C# C++.NET 开发的 .NET 应用程序实例列表。本文档还给出了每一个程序的描述下载链接。随着新程序加入我们的支持站点,本文档将不断更新。----

haibodotnet的专栏 1万+

如何使用 ADO.NET Visual C# .NET 调用带参数存储过程

 如何使用 ADO.NET Visual C# .NET 调用带参数存储过程 本页概要使用 DataReader 返回行参数使用 Command 对象的 ExecuteScalar 方法使用 Command 对象的 ExecuteNonQuery 方法参考 var sectionFilter

C#,SQL,Castle,Hibernate,MVC,Spring.net 1875

通过 ADO.NET 编辑 Access 数据库

通过 ADO.NET 编辑 Access 数据库发布日期: 8/8/2003 | 更新日期: 6/7/2004Martin TracyVisual Studio TeamMicrosoft Corporation适用于: Microsoft® ADO.NETMicrosoft® ASP.NETMicrosoft® Visual C#® .NETMicrosoft® Visual

≡≡奋斗中的猫≡≡ 6139

HOW TO:使用 ADO.NET Visual C# .NET 调用带参数存储过程

HOW TO:使用 ADO.NET Visual C# .NET 调用带参数存储过程対象製品 本文的发布号曾为 CHS310070 有关本文的 Microsoft Visual Basic .NET 版本,请参见 308049。有关本文的 Microsoft Visual C++ .NET 版本,请参见 310071。有关本文的 Microsoft Visual J# .NET 版本

异道的专栏 1288

310070 HOW TO:使用 ADO.NET Visual C# .NET 调用带参数存储过程 (From MKBA)

本文的发布号曾为 CHS310070 有关本文的 Microsoft Visual Basic .NET 版本,请参见 308049。有关本文的 Microsoft Visual C++ .NET 版本,请参见 310071。有关本文的 Microsoft Visual J# .NET 版本,请参见 320627。本文引用下面的 Microsoft .NET 框架类库名称空间: Sys

980

如何使用 ASP.NETADO.NET Visual C# .NET 查询显示 Excel 数据

如何使用 ASP.NETADO.NET Visual C# .NET 查询显示 Excel 数据适用于 有关本文的 Microsoft Visual Basic .NET 版本,请参阅 311731。 本文引用下面的 Microsoft .NET Framework 类库命名空间: System.Data.OleDb本任务的内容概要 创建示例 Excel 工

≡≡奋斗中的猫≡≡ 1553

HOW TO:使用 ADO.NET Visual C++ .NET 调用带参数存储过程

<br />http://support.microsoft.com/kb/310071<br /> HOW TO:使用 ADO.NET Visual C++ .NET 调用带参数存储过程查看本文应用于的产品<br /> 此示例使用 ExecuteNonQuery 方法运行查询并返回参数值。ExecuteNonQuery 还返回在运行此查询后受影响的记录数。但是,ExecuteNonQuery 不从该存储过程返回任何行或列。<br /><br />如果只需要知道更改的行数,那么在使用 INSER

looob的专栏 949

C#ADO.NET操作Excel文件实战教程

在企业级应用开发中,Excel常被用于数据导入导出、报表生成及数据可视化等场景。C#凭借其强大的类库支持与Office组件的高度集成,成为操作Excel文件的首选语言之一。本章将从Excel对象模型入手,介绍C#中操作Excel的核心开发库,如用于自动化Excel应用,OleDb用于以数据库方式访问Excel文件。通过这些技术,开发者可以灵活地实现Excel文件的读写、结构管理与数据处理。后续章节将围绕连接配置、数据操作、资源管理及项目实战展开,构建一套完整的Excel操作解决方案。

weixin_34456923的博客 927

309361 HOW TO:在 Visual C# .NET使用 DataReader 检索 Oracle 存储过程 (MKBA)

本文的发布号曾为 CHS309361 有关本文的 Microsoft Visual Basic .NET 版本,请参见 308073。有关本文的 Microsoft Visual C++ .NET 版本,请参见 309362。本文引用下面的 Microsoft .NET 框架类库名称空间: System.Data.OleDb本任务的内容概要 要求 创建 Or

801

C# ADO.NET 构建人力资源管理系统HRM实战教程

C#(读作“C Sharp”)是一种由微软开发的现代、面向对象、类型安全的编程语言。自2000年首次发布以来,C# 已经成为开发 Windows 应用程序各种类型服务器应用的重要语言之一。它是.NET框架的一部分,支持面向组件的编程,拥有丰富的库以及跨平台运行的能力。Visual Studio 允许开发者根据个人偏好进行大量自定义设置。这些设置可以保存在个人的设置文件中,以便在不同的机器上使用相同的环境配置。自定义设置包括:工具栏菜单定制。

weixin_29138345的博客 801

310130 HOW TO:使用 ODBC .NET 提供程序 Visual C# .NET 执行 SQL 参数化存储过程 (From MKBA)

本文的发布号曾为 CHS310130 有关本文的 Microsoft Visual Basic .NET 版本,请参见 309486。有关本文的 Microsoft Visual C++ .NET 版本,请参见 310142。本文引用下面的 Microsoft .NET 框架类库名称空间: Microsoft.Data.Odbc 本任务的内容概要 调用语法示例

1120

如何使用C#ADO.NETSQL Server数据库读取写入blob数据

转自:http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158 标题:How To Read and Write BLOB Data by Using ADO.NET with Visual C# .NET The GetChunk and the AppendChunk methods are not a

Hugoo_Hu 雨夜星空 1263

C#使用ADO.NET创建SQL Server数据库

如何使用 ADO.NET Visual C# .NET 以编程方式创建 SQL Server 数据库

NS 3076

【期末复习】Visual C# .NET

文章目录Visual C# .NET控件及其应用标签控件(Label)文本框(Text)单选按钮控件复选框按钮控件(CheckBox)列表框(ListBox)组合框(ComboBox)Timer图片框(PictureBox)滚动条TreeView(树型视图)列表视图(ListView)菜单(MeunStrip)链接数据库(以Access为样例)关系数据库的基本概念关系数据库的四个常用SQL语句ADO.NET的体系结构及存取模式ADO.NET对象编程 Visual C# .NET 控件及其应用 标签控件(L

m0_50994219的博客 655

HOW TO:使用 Visual C# .NET 向 Excel 工作簿传输数据

HOW TO:使用 Visual C# .NET 向 Excel 工作簿传输数据  概要 概述 方法  使用“自动化”逐个单元格地传输数据  使用“自动化”将数据数组传输到工作表上的区域  使用“自动化”将 ADO 记录集传输到工作表区域  使用“自动化”在工作表上创建 QueryTable 对象  使用 Windows 剪贴板  创建可由 Excel 分析为行列的带分隔符的文本文件  使用 A

大闸谢的专栏 1081
上一篇: Transact_SQL
下一篇: 理解C#中的string类型
BlueTzar
博客等级 码龄22年 10粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值