我是初学者,并尝试做一些你觉得简单的事情。我想在我的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)值,我可以很好地访问相关数据。
我基本上只想输出结果中的所有行= \
答案 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 强>
在完成渲染页面时不要忘记处理读者,命令和连接!