SqlCommand
对象来执行存储过程并获取返回的表数据。创建一个 SqlConnection
对象连接到数据库,然后创建 SqlCommand
对象并设置其 CommandType
为 CommandType.StoredProcedure
,指定 存储过程的名称。使用 ExecuteReader
方法执行存储过程并获取一个 SqlDataReader
对象,通过该对象可以遍历返回的表数据。
在C#中,通过使用ADO.NET可以方便地调用SQL Server的存储过程,并获取存储过程返回的表数据,下面是一个详细的示例,展示如何在C#中实现这一功能。
我们需要在SQL Server中创建一个存储过程,假设我们有一个名为GetEmployees
的存储过程,它从Employees
表中选择所有员工的信息。
CREATE PROCEDURE GetEmployees AS BEGIN SELECT FROM Employees; END
我们在C#中使用SqlConnection
和SqlCommand
类来调用这个存储过程,并获取返回的表数据。
using System; using System.Data; using System.Data.SqlClient; class Program { static void Main() { // 定义连接字符串 string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; try { // 创建并打开连接 using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // 创建命令对象,指定存储过程名称 SqlCommand command = new SqlCommand("GetEmployees", connection); command.CommandType = CommandType.StoredProcedure; // 执行命令并获取结果 using (SqlDataReader reader = command.ExecuteReader()) { // 读取并显示每一行数据 while (reader.Read()) { Console.WriteLine($"ID: {reader["ID"]}, Name: {reader["Name"]}, Department: {reader["Department"]}"); } } } } catch (Exception ex) { Console.WriteLine($"An error occurred: {ex.Message}"); } } }
连接字符串:包含服务器地址、数据库名称、用户名和密码。
SqlConnection:用于建立与数据库的连接。
SqlCommand:用于执行存储过程,这里将CommandType
设置为StoredProcedure
,表示这是一个存储过程。
SqlDataReader:用于读取存储过程返回的结果集。
假设存储过程返回的数据如下所示:
ID | Name | Department |
1 | Alice | HR |
2 | Bob | Engineering |
3 | Charlie | Marketing |
在C#程序中,我们可以将这些数据打印到控制台,或者将其存储到一个数据结构中以供进一步处理。
Q1: 如果存储过程返回多个结果集,如何处理?
A1: 如果存储过程返回多个结果集,可以使用SqlDataReader
的NextResult
方法来遍历每个结果集。
using (SqlDataReader reader = command.ExecuteReader()) { do { while (reader.Read()) { Console.WriteLine($"ID: {reader["ID"]}, Name: {reader["Name"]}, Department: {reader["Department"]}"); } } while (reader.NextResult()); }
Q2: 如果需要将返回的数据存储到一个DataTable中,应该如何操作?
A2: 可以将SqlDataReader
的数据加载到一个DataTable
中,以下是示例代码:
DataTable dataTable = new DataTable(); dataTable.Load(command.ExecuteReader()); // 现在可以在dataTable中访问数据 foreach (DataRow row in dataTable.Rows) { Console.WriteLine($"ID: {row["ID"]}, Name: {row["Name"]}, Department: {row["Department"]}"); }
通过以上步骤和示例代码,你可以在C#中轻松调用存储过程并处理返回的表数据。