Итак, я переношу устаревшее приложение с coldfusion на asp.net/c#. Моя проблема в том, что (и я все это искал, но, возможно, я не формулирую свою проблему должным образом, чтобы получить хорошие результаты), я хочу взять свои результаты из первого запроса, который я имею, и выполнить второй запрос заполнить этот столбец.
Вот как я это сделал в Coldfusion:
<cfquery name="p" datasource="db">
select * from table
</cfquery>
<cfloop query="p">
<tr>
<td>
<a href="page.cfm?id=#p.id#">#p.title#</a>
</td>
<td">
#p.category#
</td>
<td>
#CreateObject("component","/components.dao").getuser(p.userid).user_fullname()#
</td>
</tr>
</cfloop>
Вы заметите, что я вызываю компонент и метод, которые также отправляют идентификатор пользователя из запроса. У этого метода есть другой запрос, который вызывает отдельную базу данных и возвращает информацию об этом пользователе, в данном случае полное имя, а не просто идентификатор пользователя. Вот где у меня проблемы в asp.net/c#, для этого я создал следующий код:
<asp:Repeater id="program_list" runat="server">
<ItemTemplate>
<tr>
<td>
<a href="page.aspx?id=<%# Eval("id") %>"><%# Eval("title") %></a>
</td>
<td>
<%# Eval("category") %>
</td>
<td>
<%# Eval("userid")%> (needs full name convert)
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
и в коде
protected void Page_Load(object sender, EventArgs e)
{
try
{
DbConnection connection = new SqlConnection();
connection.ConnectionString = "***";
connection.Open();
SqlCommand cmd = (SqlCommand)connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM table";
SqlDataReader reader = null;
reader = cmd.ExecuteReader();
program_list.DataSource = reader;
program_list.DataBind();
reader.Close();
connection.Close();
}
catch (Exception ex)
{
Response.Write(ex);
}
}
Как видите, он выполняет только первую часть, выводя исходный запрос, но я не уверен, как взаимодействовать с этим запросом, чтобы второй раз вызвать базу данных для получения сведений о пользователях. Любые идеи будут с благодарностью, спасибо.