C#调用SQL Server存储过程

引言

在开发C#应用程序时,我们经常需要与数据库进行交互。SQL Server是一个流行的关系型数据库管理系统,它提供了存储过程来帮助我们管理和执行数据库操作。本文将介绍如何使用C#调用SQL Server存储过程,并提供相应的代码示例。

存储过程简介

存储过程是一组预编译的SQL语句集合,它们作为一个单元被保存在数据库中,并可以被多次调用。存储过程通常用于实现复杂的业务逻辑和数据操作,可以提高数据库性能和安全性。

存储过程可以接受参数,并返回结果集或输出参数。C#中可以通过ADO.NET访问数据库,并使用SQLCommand对象来调用存储过程。

准备工作

在开始使用C#调用SQL Server存储过程之前,需要确保以下条件已满足:

  1. 安装SQL Server,并创建相应的数据库。
  2. 在数据库中创建存储过程。

以下是一个简单的存储过程示例,它接受一个参数,并返回一个结果集:

CREATE PROCEDURE GetCustomers
    @City NVARCHAR(50)
AS
BEGIN
    SELECT * FROM Customers WHERE City = @City
END

C#调用存储过程

接下来,我们将使用C#代码来调用上述的存储过程。

步骤1:创建数据库连接

首先,我们需要创建一个数据库连接。在C#中,可以使用SQLConnection对象来实现。在连接字符串中指定服务器名称、数据库名称和身份验证等信息。

using System.Data.SqlClient;

string connectionString = "Data Source=YourServer;Initial Catalog=YourDatabase;Integrated Security=True";
SqlConnection connection = new SqlConnection(connectionString);

步骤2:创建存储过程命令

接下来,我们需要创建一个SQLCommand对象,并指定要执行的存储过程名称和连接。

SqlCommand command = new SqlCommand("GetCustomers", connection);
command.CommandType = CommandType.StoredProcedure;

步骤3:添加存储过程参数

如果存储过程接受参数,我们需要添加相应的参数到SQLCommand对象中。可以使用SQLParameter对象来指定参数名称、数据类型和值。

SqlParameter parameter = new SqlParameter("@City", SqlDbType.NVarChar);
parameter.Value = "New York";
command.Parameters.Add(parameter);

步骤4:执行存储过程

现在,我们可以执行存储过程并获取结果集。

connection.Open();
SqlDataReader reader = command.ExecuteReader();

while (reader.Read())
{
    // 处理结果集
}

步骤5:关闭连接

最后,记得在使用完数据库后关闭连接。

connection.Close();

完整的代码示例如下:

using System;
using System.Data;
using System.Data.SqlClient;

namespace CallingStoredProcedure
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Data Source=YourServer;Initial Catalog=YourDatabase;Integrated Security=True";
            SqlConnection connection = new SqlConnection(connectionString);

            try
            {
                SqlCommand command = new SqlCommand("GetCustomers", connection);
                command.CommandType = CommandType.StoredProcedure;

                SqlParameter parameter = new SqlParameter("@City", SqlDbType.NVarChar);
                parameter.Value = "New York";
                command.Parameters.Add(parameter);

                connection.Open();
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    // 处理结果集
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                connection.Close();
            }
        }
    }
}

类图

下面是C#代码示例中涉及到的类的类图。

classDiagram
    class SqlConnection
    class SqlCommand
    class SqlParameter
    class SqlDataReader
    
    SqlConnection <-- SqlCommand
    SqlCommand ..> SqlParameter
    SqlDataReader --> SqlCommand

状态图

下面是C#代码示例中涉及到的数据库连接的状态转换图。

stateDiagram
    [*] --> Closed
    Closed --> Opened : Open()
    Opened --> Closed : Close()

结论

通过以上步骤,我们可以使用C#轻松调用SQL Server存储过程,并获取结果集。存储过程是一个强大的工具,可以帮助我们管理和