ADO.net, как связать данные из определенной ячейки таблицы базы данных с контролем повторителя при загрузке страницы с помощью C # и подключенной модели? - PullRequest
0 голосов
/ 11 декабря 2011

Я хочу связать данные из ячейки базы данных Oracle с набором меток в элементе управления повторителем, используя C #, ADO.NET и подключенную модель.Повторитель отображаемой страницы выглядит примерно так (для простоты это всего лишь один пример):

<asp:Repeater ID="rptMain" runat="server" >
   <ItemTemplate>
     <h3 id="contactUs"> <%#Eval("ppCustSurvey")%> %></h3>
   </ItemTemplate>
</asp:Repeater>

Теперь строка свойства "ppCustSurvey" - это свойство, которое в моем классе свойств называется ppContent.В моем коде за страницей у меня есть это как часть загрузки страницы

if (!Page.IsPostBack)
{
    clsContent objCon = new clsContent();
    rptMain.DataSource = objCon.getContent();
    rptMain.DataBind();
}

И метод getContent () указывает на это

public class clsContent
{
    static readonly string _strConn;

    static clsContent()
    {
        _strConn = WebConfigurationManager.ConnectionStrings["MyDilbert_Nov30"].ConnectionString;
    }
    public List<ppContent> getContent()
    {
        List<ppContent> objAllContent = new List<ppContent>();
        OracleConnection conn = new OracleConnection(_strConn);
        try
        {
            conn.Open();
            string strCmd = "Select site_content from content";
            OracleCommand cmd = new OracleCommand(strCmd, conn);
            OracleDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                ppContent objCon = new ppContent();
                objCon.ppCustSurvey = (dr["site_content"].ToString());
            }
            return objAllContent;
        }
        catch(Exception)
        {
            objAllContent.Clear();
            return objAllContent;
        }
        finally{
            conn.Close();
        }
    }
}

Теперь я думаю, что мне нужно передатьпараметр идентификатора столбца, чтобы идентифицировать ppCustSurvey как принадлежащий столбцу с PK 1. Как это сделать?

Ответы [ 2 ]

1 голос
/ 11 декабря 2011

Я опубликую свое решение для тех, кто считает его полезным.Я решил проблему, добавив этот код в свой класс:

    public List<ppControls> getControls(int _id)
{
    List<ppControls> objAllControls = new List<ppControls>();
    OracleConnection conn = new OracleConnection(_strConn);
    OracleCommand cmd = new OracleCommand("SELECT * FROM controls WHERE reference =: parID", conn);
    cmd.Parameters.AddWithValue(":parID", _id);
    try
    {
        conn.Open();
        //string strCmd = parSelect;
        //OracleCommand cmd = new OracleCommand(strCmd, conn);
        OracleDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {                objCon.ppCustSurvey = dr["controls_content"].ToString();}
        return objAllControls;
    }

Затем в коде позади я передаю параметр внешнего ключа следующим образом:

        rptMain.DataSource = objCon.getControls(7);
        rptMain.DataBind();

Это делается для каждогоповторитель.Я создал класс свойств с get и set для ppCustSurvey и назначил имя свойства для функции Eval повторителя на странице отображения.Во всяком случае, так я это решил.Теперь мне интересно, как бы вы сделали это, чтобы уменьшить нагрузку на сервер, но это тема для другого вопроса.

0 голосов
/ 11 декабря 2011

Если вы собираетесь собирать много данных из базы данных в серию меток, подобных этой, я подозреваю, что ваши администраторы баз данных могут подвергнуть сомнению повторное столкновение с базой данных (то есть открытие соединения и выполнение оператора select для каждогоподписывать каждый раз, когда страница отображается), особенно если это сайт с большим трафиком.

В таких случаях мы обычно выбираем все необходимые данные из базы данных одним махом и динамически генерируем требуемыеHTML в коде позади.Это может занять немного больше времени, но это должно быть намного быстрее и иметь гораздо меньшее влияние на базу данных.

Если вы хотите придерживаться текущего дизайна, нам нужно посмотреть, как PKстолбец определен на стороне клиента, но это может быть так же просто, как просто добавить параметр в метод ppCustSurvey.

...