合理使用ADO.NET参数

开发 后端
这里就使用ADO.NET参数如何调用 Northwind 示例数据库中的 SQL Server 存储过程做出了详细的介绍,希望对大家有帮助。

使用ADO.NET参数还是比较常用的,于是我研究了一下对 SqlCommand 和存储过程使用参数,在这里拿出来和大家分享一下,希望对大家有用。在数据驱动的应用程序中,存储过程具有许多优势。通过利用存储过程,数据库操作可以封装在单个命令中,为获取***性能而进行优化并通过附加的安全性得到增强。尽管可以通过在 SQL 语句中传递后接参数自变量的存储过程名称来调用相应的存储过程,但如果使用 ADO.NET DbCommand 对象的 Parameters 集合,则可以让您更为明确地定义存储过程参数,并访问输出参数和返回值。

使用ADO.NET参数化语句在服务器上通过使用 sp_executesql 执行,sp_executesql 允许重复使用查询计划。sp_executesql 批处理命令中的本地光标或变量对于调用 sp_executesql 的批处理命令是不可见的。数据库上下文中的更改只持续到 sp_executesql 语句的结尾。有关更多信息,请参见 SQL Server 联机丛书。

#T#对 SqlCommand 使用参数以执行 SQL Server 存储过程时,添加到 Parameters 集合中的参数的名称必须与存储过程中参数标记的名称相匹配。SQL Server 的 .NET Framework 数据访问接口不支持问号 (?)使用ADO.NET参数传递到 SQL 语句或存储过程的占位符。它将存储过程中的参数视为命名参数,并搜索匹配的参数标记。例如,通过使用名为 @CustomerID 的参数定义 CustOrderHist 存储过程。您的代码在执行该存储过程时,它也必须使用名为 @CustomerID 的参数。

此示例演示了如何调用 Northwind 示例数据库中的 SQL Server 存储过程。存储过程的名称为 dbo.SalesByCategory,它具有名为 @CategoryName 的输入参数,其数据类型为 nvarchar(15)。该代码在 using 代码块内创建一个新 SqlConnection,以便在过程结束时释放连接。会创建 SqlCommand 和 SqlParameter 对象,并设置其属性。SqlDataReader 会执行 SqlCommand 并从存储过程返回结果集,以在控制台窗口中显示相关输出。

您可以选择使用任一重载构造函数在一个语句中设置多个属性,而不是创建 SqlCommand 和 SqlParameter 对象,然后在各个语句中设置属性。

Visual Basic

  1. Shared Sub GetSalesByCategory(ByVal connectionString As String, _  
  2. ByVal categoryName As String)  
  3.  
  4. Using connection As New SqlConnection(connectionString)  
  5.  
  6. ' Create the command and set its properties.  
  7. Dim command As SqlCommand = New SqlCommand()  
  8. command.Connection = connection 
  9. command.CommandText = "SalesByCategory" 
  10. command.CommandType = CommandType.StoredProcedure  
  11.  
  12. ' Add the input parameter and set its properties.  
  13. Dim parameter As New SqlParameter()  
  14. parameter.ParameterName = "@CategoryName" 
  15. parameter.SqlDbType = SqlDbType.NVarChar  
  16. parameter.Direction = ParameterDirection.Input  
  17. parameter.Value = categoryName 
  18.  
  19. ' Add the parameter to the Parameters collection.  
  20. command.Parameters.Add(parameter)  
  21.  
  22. ' Open the connection and execute the reader.  
  23. connection.Open()  
  24. Dim reader As SqlDataReader = command.ExecuteReader()  
  25.  
  26. If reader.HasRows Then  
  27. Do While reader.Read()  
  28. Console.WriteLine("{0}: {1:C}", _  
  29. reader(0), reader(1))  
  30. Loop  
  31. Else  
  32. Console.WriteLine("No rows returned.")  
  33. End If  
  34. End Using  
  35. End Sub  

C#

  1. static void GetSalesByCategory(string connectionString,   
  2. string categoryName)  
  3. {  
  4. using (SqlConnection connection = new SqlConnection(connectionString))  
  5. {  
  6. // Create the command and set its properties.  
  7. SqlCommand command = new SqlCommand();  
  8. command.Connection = connection;  
  9. command.CommandText = "SalesByCategory";  
  10. command.CommandType = CommandType.StoredProcedure;  
  11.  
  12. // Add the input parameter and set its properties.  
  13. SqlParameter parameter = new SqlParameter();  
  14. parameter.ParameterName = "@CategoryName";  
  15. parameter.SqlDbType = SqlDbType.NVarChar;  
  16. parameter.Direction = ParameterDirection.Input;  
  17. parameter.Value = categoryName;  
  18.  
  19. // Add the parameter to the Parameters collection.   
  20. command.Parameters.Add(parameter);  
  21.  
  22. // Open the connection and execute the reader.  
  23. connection.Open();  
  24. SqlDataReader reader = command.ExecuteReader();  
  25.  
  26. if (reader.HasRows)  
  27. {  
  28. while (reader.Read())  
  29. {  
  30. Console.WriteLine("{0}: {1:C}", reader[0], reader[1]);  
  31. }  
  32. }  
  33. else  
  34. {  
  35. Console.WriteLine("No rows found.");  
  36. }  
  37. reader.Close();  
  38. }  
  39. }  
责任编辑:田树 来源: 博客
相关推荐

2009-11-13 10:57:28

ADO.NET Dat

2009-12-28 15:11:36

ADO.NET专家

2009-12-21 14:04:48

ADO.NET参数

2009-12-25 16:56:36

ADO.NET建立连接

2009-12-30 14:21:21

ADO.NET设置

2009-12-31 14:28:09

ADO.NET参数

2009-11-13 14:38:45

ADO.NET Dat

2009-11-12 10:06:01

ADO.NET读取数据

2009-11-13 14:22:11

ADO.NET Dat

2009-12-25 10:25:59

2009-11-13 10:10:07

2009-11-03 16:37:10

2009-11-04 10:07:52

ADO.NET DbP

2009-10-29 10:34:31

ADO.NET使用技巧

2009-12-22 16:35:11

ADO.NET控件

2009-12-21 14:50:47

ADO.NET优化

2009-12-22 15:20:25

ADO.NET功能

2009-11-04 09:18:12

ADO.NET _Re

2009-12-21 16:53:06

ADO.NET使用说明

2009-08-21 16:35:08

使用C#结合ADO.N
点赞
收藏

51CTO技术栈公众号