将SQLDATAREADER信息传递给具有c#属性的ASPX

本文关键字:属性 ASPX SQLDATAREADER 信息 | 更新日期: 2023-09-27 18:23:35

我是一个初学者,正在尝试做一些你们都觉得简单的事情。我想在CS中的页面加载上运行SQL select,并从ASPX访问该数据,以下是我的默认.CS代码:

public partial class _Default : System.Web.UI.Page
{
private SqlDataReader reader = null;
public SqlDataReader Reader { get { return reader; } set { reader = value; } }
    protected void Page_Load(object sender, EventArgs e)
    {
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    using (SqlConnection connection = new SqlConnection(connectionString)) {
    connection.Open();
    using (SqlCommand command = new SqlCommand("SELECT * FROM uploads WHERE status IS NULL AND uploader = @uploader", connection)) {
        command.Parameters.Add(new SqlParameter("uploader", "anonymous"));
        Reader = command.ExecuteReader();
    }
    }
    }
}

在我的aspx中,我正在尝试使用以下内容:

<%= Reader.GetString(1) %>

但我不断收到以下错误:异常详细信息:System.InvalidOperationException:读取器关闭时调用元数据的尝试无效。

我知道我的using语句是在连接结束时关闭连接,但我不确定为什么我不能从ASPX访问数据。如果我在using循环中使用相同的GetString(1)值,我可以很好地访问相关的数据。

我基本上只是想输出结果中的所有行=''

将SQLDATAREADER信息传递给具有c#属性的ASPX

您应该真正从"using"块内部更新页面。在最简单的形式中,您可以在页面中添加一个Literal控件,并在使用块中更新它:

Reader = command.ExecuteReader();
...
Literal1.Text = Reader.GetString(1);

当您在标记中使用以下语法时:

<%= Reader.GetString(1) %>   

编译器将生成在页面生命周期的渲染阶段执行的CCD_ 1语句。在您的情况下,连接将在那时处理掉。

您可以保持连接和读取器的活动状态,并在页面的dispose方法的重写中处理它,但我不建议使用这种方法。

您不应该丢弃sql命令和sql连接。

Load事件中删除使用关键字,因为当您退出使用部分时,连接会关闭,从而导致读取器关闭。在阅读器关闭后,您不能在呈现或数据绑定中使用它。

public partial class _Default : System.Web.UI.Page
{
private SqlDataReader reader = null;
public SqlDataReader Reader { get { return reader; } set { reader = value; } }
    protected void Page_Load(object sender, EventArgs e)
    {
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    SqlConnection connection = new SqlConnection(connectionString);
    connection.Open();
    SqlCommand command = new SqlCommand("SELECT * FROM uploads WHERE status IS NULL AND uploader = @uploader", connection);
        command.Parameters.Add(new SqlParameter("uploader", "anonymous"));
        Reader = command.ExecuteReader();
    }
}

但是

不要忘记在您完成渲染页面时处理读取器、命令和连接!