我正在开发一个Web窗体应用程序,我还需要2-3个以上的HTML代码 我已经像这样创建了.ascx控件,它代表了重复的代码:
protected override void Render(HtmlTextWriter writer)
{
StringBuilder str = new StringBuilder();
while (connRef.Read())
{
str.Append(connRef["some_database_field"]);
}
writer.Write(str.ToString());
base.Render(writer);
}
connRef是对DataReader对象的引用,我在需要这段代码的地方传递 在其他控件中,我使用以下代码:
MSSqlConn s = new MSSqlConn();
StringBuilder str = new StringBuilder();
s.OpenConn("select * from notes order by note_date desc;");
notes.note c = (notes.note)Page.LoadControl(@"/controls/notes/note.ascx");
c.ID = "note";
c.connRef = s;
while (s.Read())
{
str.Append(Html.RenderControl(c));
}
s.CloseConn();
Response.Write(str.ToString());
MSSqlConn是我的数据库连接类 RenderControl将任何控件呈现为HTML字符串 第二个代码段中的s只返回一个记录而不是两个记录。出于某种原因,如果我将引用传递给另一个控件(c.connRef = s),s将关闭。
也许我错过了什么,我不知道。
如果我没有解释清楚,我很抱歉。
答案 0 :(得分:2)
您的问题是您正在调用Read()方法两次。这是您的代码基本上正在做的事情:
while (s.Read())
{
while (connRef.Read())
{
str.Append(connRef["some_database_field"]);
}
}
对Read()方法的每次调用都会使数据读取器前进一条记录。你需要取出一个while循环。
您还应注意,如果您将此数据读取器传递给多个用户控件,则需要将其重置为从每个新用户控件的开头开始。