ASP.NET调用存储过程示例:输入输出参数与返回值

3星 · 超过75%的资源 需积分: 16 18 下载量 142 浏览量 更新于2024-09-20 1 收藏 60KB DOC 举报
"ASP.NET中调用存储过程的实例教程" 在ASP.NET开发中,存储过程是一种常用的技术,用于封装数据库中的复杂逻辑或操作。本文将详细介绍如何在ASP.NET中调用带有输入输出参数和返回值的存储过程。 首先,我们需要创建一个简单的数据库和表。在示例中,我们创建了一个名为"Student"的数据库,并在其中创建了"Users"表,包含两个字段:`id`(主键,自动递增)和`name`、`password`(非空)。 ```sql use Student go create table Users ( id int identity(1,1) primary key, name nvarchar(20) not null, password nvarchar(20) not null ) ``` 接着,我们创建一个带输入参数的存储过程`proc_login`,它接受用户名`@name`和密码`@password`,并根据这些参数查询"Users"表中的匹配记录。 ```sql create procedure proc_login @name nvarchar(20), @password nvarchar(20) as begin select * from Users where name = @name and password = @password end go ``` 在ASP.NET应用中,调用这个存储过程通常需要以下步骤: 1. 首先,获取数据库连接字符串,这通常存储在应用程序的配置文件(如Web.config)中。可以通过`ConfigurationManager.AppSettings`来获取。 ```csharp private string connectionString = ConfigurationManager.AppSettings["connectionString"]; ``` 2. 创建一个新的`SqlConnection`对象,传入连接字符串。 ```csharp using (SqlConnection conn = new SqlConnection(connectionString)) { // ... } ``` 3. 初始化一个`SqlCommand`对象,设置其命令文本为存储过程的名称,并指定命令类型为`CommandType.StoredProcedure`。 ```csharp SqlCommand cmd = new SqlCommand("proc_login", conn); cmd.CommandType = CommandType.StoredProcedure; ``` 4. 添加参数到命令对象,与存储过程中的参数相对应。 ```csharp cmd.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 20)).Value = name; cmd.Parameters.Add(new SqlParameter("@password", SqlDbType.NVarChar, 20)).Value = password; ``` 5. 打开数据库连接,执行命令,通常会用到`ExecuteReader`或`ExecuteScalar`等方法。在这个例子中,由于存储过程返回的是用户信息,可以使用`ExecuteReader`来获取结果集。 ```csharp conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { // 处理查询结果 } reader.Close(); ``` 如果存储过程有输出参数或返回值,我们还需要设置参数的方向(如`InputOutput`或`ReturnValue`),并在执行命令后读取这些参数的值。 例如,如果在`proc_login`中添加一个输出参数`@success`来指示登录是否成功,我们可以这样修改存储过程: ```sql create procedure proc_login @name nvarchar(20), @password nvarchar(20), @success bit output as begin set @success = (select count(*) from Users where name = @name and password = @password) > 0; end go ``` 然后在C#代码中: ```csharp cmd.Parameters.Add(new SqlParameter("@success", SqlDbType.Bit) { Direction = ParameterDirection.Output }); // 执行命令 conn.Open(); cmd.ExecuteNonQuery(); bool isLoggedIn = (bool)cmd.Parameters["@success"].Value; ``` 通过这种方式,ASP.NET应用能够有效地调用SQL Server中的存储过程,处理复杂的数据库操作,同时保持代码的清晰和可维护性。