如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
2007-01-05 17:03
1351 查看
如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
本页
概要
使用 DataReader 返回行和参数
使用 Command 对象的 ExecuteScalar 方法
使用 Command 对象的 ExecuteNonQuery 方法
参考
var sectionFilter = "type != 'notice' && type != 'securedata' && type != 'querywords'"; var tocArrow = "/library/images/support/kbgraphics/public/en-us/downarrow.gif"; var depthLimit = 10; var depth3Limit = 10; var depth4Limit = 5; var depth5Limit = 3; var tocEntryMinimum = 1;
概要
loadTOCNode(1, 'summary');有多种方法使用 ADO.NET 调用存储过程并获得返回值和返回参数,其中包括:
• | 使用 DataSet 对象,在获得返回值和返回参数之外,还可以收集并使用返回的数据行。 |
• | 使用 DataReader 对象收集返回的行,遍历这些行,然后收集返回值和返回参数。 |
• | 使用 ExecuteScalar 方法返回结果中第一行的第一列的值以及返回值和返回参数。这对于聚合函数特别有用。 |
• | 使用 ExecuteNonQuery 方法只返回参数和值。任何返回的行都将被丢弃。这对于执行操作查询特别有用。 |
.NET 数据提供程序
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconadonetproviders.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconadonetproviders.asp)
在本文的每个示例中,这些参数都被添加到 Command 对象的 Parameters 集合中。使用 SqlCommand 对象时,您不必按照任何特定的顺序添加参数,但必须保证参数名正确。使用 OleDbCommand 对象时,必须按照正确的顺序添加参数,不能按照名称使用参数。
回到顶端 |
使用 DataReader 返回行和参数
loadTOCNode(2, 'summary');您可以使用 DataReader 对象返回只读的仅向前型数据流。DataReader 中所包含的信息可以来自一个存储过程。本示例使用 DataReader 对象运行带有输入和输出参数的存储过程,然后遍历返回记录,以查看返回参数。
1. | 在运行 Microsoft SQL Server 的服务器上创建下面的存储过程:[code]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 onA.au_id=TA.au_idjoin titles as Ton T.title_id=TA.title_idwhere A.au_id=@au_idINset @numTitlesOUT = @@Rowcount [/code] | ||||||||||||
2. | 新建一个新的 Visual C# .NET Windows 应用程序项目。 | ||||||||||||
3. | 对 System 和 System.Data 命名空间使用 using 语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。将此代码添加到“窗体”代码模块的顶部。请确保只复制对应于您所选的提供程序的代码。SQL 客户端[code]using System.Data.SqlClient; [/code]OLE DB 数据提供程序 [code]using System.Data.OleDb; [/code] | ||||||||||||
4. | 用以下代码替换 private Form_Load 事件中的代码:SQL 客户端[code]SqlConnection PubsConn = new SqlConnection ("Data Source=server;integrated " + "Security=sspi;initial catalog=pubs;"); SqlCommand testCMD = new SqlCommand ("TestProcedure", PubsConn); testCMD.CommandType = CommandType.StoredProcedure; 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(); VS.NET里++++++++++++++++++++++++++++++++++++++++++++++ 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); +++++++++++++++++++++++++++++++++++++++++++++++ =ASP.NET里 +++++++++++++++++++++++++++++++++++++++++++++++++ testCMD.ExecuteNonQuery(); mylabel.Text="返回值为"+NumTitles.Value.ToString(); PubsConn.Close(); +++++++++++++++++++++++++++++++++++++++++++++
|
使用 Command 对象的 ExecuteScalar 方法
loadTOCNode(2, 'summary');可以使用 Command 对象的 ExecuteScalar 方法检索参数值。另外,ExecuteScalar 返回该存储过程的第一行的第一列。这对于聚合函数特别有用,如下例所示。
1. | 在运行 SQL Server 的服务器上创建下面的存储过程:[code]Create Procedure TestProcedure2( @au_idIN varchar (11))As/* set nocount on */ select count (T.title) from authors as A join titleauthor as TA onA.au_id=TA.au_idjoin titles as Ton T.title_id=TA.title_idwhere A.au_id=@au_idINReturn(5) [/code] |
2. | 新建一个新的 Visual C# .NET Windows 应用程序项目。 |
3. | 对 System 和 System.Data 命名空间使用 using 语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。将此代码添加到“窗体”代码模块的顶部。请确保只复制对应于您所选的提供程序的代码。SQL 客户端[code]using System.Data.SqlClient; [/code]OLE DB 数据提供程序 [code]using System.Data.OleDb; [/code] |
4. | 将下面的代码添加到 Form_Load 事件:SQL 客户端[code]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); [/code]OLE DB 数据提供程序 [code]string strCount; OleDbConnection PubsConn = new OleDbConnection ("Provider=SQLOLEDB;Data Source=server;" + "integrated Security=sspi; initial catalog=pubs;"); OleDbCommand testCMD = new OleDbCommand ("TestProcedure2", PubsConn); testCMD.CommandType = CommandType.StoredProcedure; OleDbParameter RetVal = testCMD.Parameters.Add ("RetVal", OleDbType.Integer); RetVal.Direction = ParameterDirection.ReturnValue; OleDbParameter IdIn = testCMD.Parameters.Add ("@au_idIN", OleDbType.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); [/code] |
5. | 修改 Connection 对象的连接字符串,以便指向运行 SQL Server 的计算机。 |
6. | 运行上述代码。注意,Command 对象的 ExecuteScalar 方法将返回参数。ExecuteScalar 还将返回所返回的行集中的第一行第一列的值。因此,intCount 的值是存储过程的 count 函数的结果。 |
相关文章推荐
- 如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- 如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- HOW TO:使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- 如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- 【转】如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- 使用ADO.NET对象调用存储过程的输入和输出参数
- 如何调用 Oracle 存储过程在 Visual Basic.NET 使用 Microsoft Oracle 托管提供程序
- 如何调用 Oracle 存储过程在 Visual Basic.NET 使用 Microsoft Oracle 托管提供程序
- HOW TO:使用 ADO.NET 和 Visual C++ .NET 调用带参数的存储过程
- 带输出参数的存储过程的使用及在C#中调用问题
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- 如何使用 ADO.NET 和 Visual C# .NET 连接到数据库并运行命令
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- ADO.NET Entity Framework如何:使用存储过程定义模型(实体框架)
- [ADO.NET]调用带参数的存储过程
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- MSSQL根据表名动态分页的存储过程以及C#.net调用使用
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据