Можно ли даже такое сделать? Для приложения, которое я пытаюсь сделать, пользователь может вводить несколько (или нет) писем, телефонных номеров и адресов для одного контакта, однако на лицевой стороне страницы я хочу только показать номер телефона, адрес электронной почты и адрес для каждого контакта (если таковой имеется).Как выбрать только один ряд из всех столбцов, но первый
Вот мой SQL запрос для получения данных (. Обратите внимание, что он был немного изменен для удобства чтения на практике, я не запрашивая SQL для печенья.):
SELECT TC.FirstName + ' ' + TC.LastName AS FullName, TCE.EmailAddress, TCPN.PhoneNumber, TCA.[Address] + ", " + TCA.City + ', ' + TCA.[State] + ', ' + TCA.ZipCode AS FullAddress, TC.Notes
FROM TContacts AS TC
INNER JOIN TContactEmails AS TCE ON TCE.ContactID = TC.ContactID
INNER JOIN TContactPhoneNumbers AS TCPN ON TCPN.ContactID = TC.ContactID
INNER JOIN TContactAddresses AS TCA ON TCA.ContactID = TC.ContactID
INNER JOIN TUserContacts AS TUC ON TUC.ContactID = TC.ContactID
INNER JOIN TUsers AS TU ON TU.UserID = TUC.UserID
WHERE TU.UserName = userCookie.Values["UserName"]
Нужный результат будет что-то похожее на использование SELECT TOP 1
вместо SELECT
, однако я не могу этого сделать специально, потому что тогда он будет отображать только первый контакт (FullName). Мне нужно увидеть каждое имя, но не каждый FullAddress, PhoneNumber или EmailAddress.
Следующая информация предназначена, если есть другое решение, не связанное с SQL-запросом.
Этот SQL-запрос используется на веб-странице с использованием кода ASP.NET и C# и вызывается через команды ADO.NET. После вызова запроса все используемые таблицы загружаются в объект DataAdapter и используются для динамического заполнения ListView. Вот код, который (SQLStatement опущен, так как он, по существу, перечисленных выше):
SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["CPDM_NightingaleAConnectionString"].ConnectionString);
SqlCommand comm = new SqlCommand(sqlStatement, conn);
comm.CommandType = CommandType.Text;
comm.Connection = conn;
conn.Open();
SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "TUsers, TUserContacts, TContactAddresses, TContactPhoneNumbers, TContactPhoneNumbers, TContactEmails, TContacts");
lvContacts.DataSource = ds.Tables[0];
lvContacts.DataBind();
conn.Close();
код ASP.NET для ListView динамически создает таблицу на основе значений, например, так:
<asp:ListView ID="lvContacts" runat="server">
<ItemTemplate>
<tr>
<td><asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Eval("FullName") %>' /></td>
<td><asp:LinkButton ID="LinkButton2" runat="server" Text='<%# Eval("EmailAddress") %>' /></td>
<td><asp:LinkButton ID="LinkButton3" runat="server" Text='<%# Eval("PhoneNumber") %>' /></td>
<td><asp:LinkButton ID="LinkButton4" runat="server" Text='<%# Eval("FullAddress") %>' /></td>
<td><asp:LinkButton ID="LinkButton5" runat="server" Text='<%# Eval("Notes") %>' /></td>
</tr>
</ItemTemplate>
</asp:ListView>
Это отнюдь не самая элегантная реализация такой функции, как это, но в ее нынешнем виде я не эксперт ни в одном из инструментов, которые я использую. Любая помощь по этой теме была бы весьма признательна.
В качестве дополнения, если кто-либо знает, как добавить разрыв строки в середине инструкции SQL SELECT, которая будет отображаться при преобразовании в HTML, это было бы очень полезно для организации FullAddress. CHAR(10) + CHAR(13)
действительно ничего не значил.
Что касается разрыва строки, может быть лучше оставить адрес отдельно в вашем операторе SQL и сломать его в коде кнопки ссылки, используя '<% # Eval (« Address ») + Environment. NewLine + Eval («Город») + «,» + Eval («State») + «+ Eval (« ZipCode »)%>' –