将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)值,我可以很好地访问相关的数据。
我基本上只是想输出结果中的所有行=''
您应该真正从"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();
}
}
但是
不要忘记在您完成渲染页面时处理读取器、命令和连接!