You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET WebForms中对比SQL Server存储过程的输出参数?

问题解决:SqlParameter无法调用GetInt32方法的错误

错误的核心原因是:GetInt32是SqlDataReader类的方法,SqlParameter对象并没有这个方法,你需要通过SqlParameter.Value属性获取存储过程返回的输出参数值,再转换为整数类型。

修正后的后台代码

protected void login(object sender, EventArgs e)
{
    String connstr = WebConfigurationManager.ConnectionStrings["Sports"].ToString();

    // 使用using语句自动释放连接,避免资源泄漏
    using (SqlConnection conn = new SqlConnection(connstr))
    {
        String username = txt_Username.Text;
        String password = txt_password.Text;

        // 注意:存储过程定义名为Login,需与代码中调用的名称保持一致
        SqlCommand loginCmd = new SqlCommand("Login", conn);
        loginCmd.CommandType = CommandType.StoredProcedure;

        loginCmd.Parameters.Add(new SqlParameter("@username", username));
        loginCmd.Parameters.Add(new SqlParameter("@password", password));

        SqlParameter loginstatus = loginCmd.Parameters.Add("@status", SqlDbType.Int);
        loginstatus.Direction = ParameterDirection.Output;

        conn.Open();
        loginCmd.ExecuteNonQuery();
        conn.Close();

        // 获取输出参数值并转换为int,先判断是否为DBNull避免转换异常
        int status = loginstatus.Value != DBNull.Value ? (int)loginstatus.Value : 0;

        if (status == 1)
        {
            Response.Write("hello");
            Response.Redirect("Home.aspx");
        }
    }
}

额外注意事项

  • 存储过程名称一致性:你的存储过程定义为Login,但原代码中调用的是userLogin,名称必须完全匹配,否则会出现找不到存储过程的错误。
  • 资源安全:用using语句包裹SqlConnection,可确保连接在代码块结束后自动释放,避免数据库连接泄漏。
  • 密码安全:当前代码和存储过程直接使用明文密码验证,存在严重安全风险,建议对密码进行哈希处理(如SHA256),存储哈希值而非明文。

内容的提问来源于stack exchange,提问作者Ahmed Haitham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:15:41