使用c#属性将SQLDATAREADER信息传递给ASPX

时间:2012-02-06 17:14:32

标签: c# asp.net sql visual-studio ado.net

我是初学者,并尝试做一些你觉得简单的事情。我想在我的CS中运行SQL select on page load并从我的ASPX访问该数据,以下是我的default.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:读取器关闭时无效尝试调用MetaData。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

<%= Reader.GetString(1) %>   

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

你可以保持连接和阅读器的存活,并在页面的Dispose方法的覆盖中处理它,但我不推荐这种方法。

答案 1 :(得分:0)

你不应该配置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();
    }
}

<强> BUT

在完成渲染页面时不要忘记处理读者,命令和连接!