ADO.net如何使用c#将特定数据库表单元格中的数据绑定到页面加载时的重复器控件;连接的模型

本文关键字:加载 模型 连接 控件 数据绑定 何使用 数据库 ADO 单元格 表单 net | 更新日期: 2023-09-27 18:17:41

我想将数据从oracle数据库单元格绑定到一个重复器控件内的一堆标签,使用c#, ADO。. NET和连接的模型。显示页面重复器是这样的(为了简单起见,这只是一个eval):

<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();
        }
    }
}

现在我认为我需要传递列的id参数,以便识别ppCustSurvey属于PK为1的列。我该怎么做呢?

ADO.net如何使用c#将特定数据库表单元格中的数据绑定到页面加载时的重复器控件;连接的模型

我将把我的解决方案贴出来给任何觉得有用的人。我通过将以下代码添加到我的类中来解决这个问题:

    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();

为每个中继器执行此操作。我为ppCustSurvey创建了一个带有get和set的属性类,并将属性名分配给显示页面上中继器的Eval函数。总之,这就是我解它的方法。现在我很好奇您会用什么方法来减少对服务器的冲击,但这是另一个问题的主题。

如果您打算从数据库中收集大量数据到像这样的一系列标签中,我怀疑您的dba可能会质疑数据库上的重复敲打(即每次呈现页面时打开连接并为每个标签执行select语句),特别是如果这是一个高流量的站点。

在这种情况下,我们通常一次性从数据库中获取所有必要的数据,并在代码隐藏中动态生成所需的HTML。这可能需要更多的前期工作,但它应该快得多,对数据库的影响也小得多。

如果您想坚持当前的设计,我们需要查看如何在客户端定义列的PK,但它可以像向ppCustSurvey方法添加一个参数一样简单。