在C#的Web Forms开发中,将存储过程的执行结果填充到GridView是常见的数据展示需求,下面会一步步讲解完整的实现方式,包含必要的配置和代码示例。

前置准备
首先需要准备数据库环境和存储过程,这里以SQL Server为例,假设已经有一个查询用户信息的存储过程,定义如下:
-- 创建测试存储过程,查询指定状态的用户信息
CREATE PROCEDURE GetUserByStatus
@Status INT -- 输入参数,用户状态
AS
BEGIN
SELECT UserId, UserName, Age, CreateTime
FROM UserInfo
WHERE Status = @Status
END同时需要在项目中添加System.Configuration和System.Data.SqlClient的引用,后者用于实现数据库访问操作。
核心实现步骤
1. 配置数据库连接字符串
在项目的Web.config文件中配置数据库连接字符串,方便后续维护:
<configuration>
<connectionStrings>
<add name="SqlConn" connectionString="Server=.;Database=TestDB;Uid=sa;Pwd=123456" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>2. 编写执行存储过程的方法
创建一个专门的方法,用于执行存储过程并返回结果集,这里使用ADO.NET的SqlCommand对象来调用存储过程:
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
public DataTable ExecuteStoredProcedure(string procName, SqlParameter[] parameters)
{
// 获取配置的连接字符串
string connStr = ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(procName, conn))
{
// 指定命令类型为存储过程
cmd.CommandType = CommandType.StoredProcedure;
// 如果有参数则添加到命令中
if (parameters != null && parameters.Length > 0)
{
cmd.Parameters.AddRange(parameters);
}
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
// 填充结果到DataTable
adapter.Fill(dt);
return dt;
}
}
}
}3. 将结果绑定到GridView
在页面的后台代码中,调用上述方法获取存储过程结果,然后绑定到GridView控件:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 创建存储过程的输入参数
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter("@Status", 1) // 查询状态为1的用户
};
// 执行存储过程,获取结果
DataTable result = ExecuteStoredProcedure("GetUserByStatus", paras);
// 绑定到GridView
GridView1.DataSource = result;
GridView1.DataBind();
}
}前台页面需要添加GridView控件,定义如下:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"
AllowPaging="true" PageSize="10">
</asp:GridView>注意事项
- 存储过程如果有输出参数,需要在参数设置时指定
Direction为ParameterDirection.Output,执行后可以从参数中获取值。 - 数据库连接对象要使用
using语句包裹,确保使用完后自动释放资源,避免连接泄露。 - 如果存储过程没有参数,
SqlParameter数组可以传null,不影响执行逻辑。 - GridView的
AutoGenerateColumns设为true会自动生成列,也可以手动定义列来定制显示内容。
常见问题排查
如果执行后GridView没有显示数据,可以先检查几个点:数据库连接字符串是否正确,存储过程名称是否写对,参数类型和值是否匹配存储过程的定义,还有SQL Server中对应的存储过程是否有符合条件的返回数据。可以在执行存储过程后打断点查看返回的DataTable是否有行数据,快速定位问题所在。