使用 datareader 用数据库多列中的数据填充文本框

Posted

技术标签:

【中文标题】使用 datareader 用数据库多列中的数据填充文本框【英文标题】:Fill textboxes with data from database multiple columns with datareader 【发布时间】:2016-09-22 10:03:58 【问题描述】:

我是数据库的新手,但想用数据阅读器和 sql 查询来填充文本框。 我的程序从我数据库中的每艘船创建 4 个文本框。每个文本框都需要填充来自不同列的数据。当 4 个文本框填满时,将添加一个带有 4 个文本框的新船,并且必须将每列的第二行添加到文本框。

这是我目前的代码:

public void Schip()
    
    using (SqlConnection thisConnection = new SqlConnection("Data Source=VMB-LP12;Initial Catalog=SmmsData;Integrated Security=True"))
    
        string oString = "Select SchipNaam, RederijNr, Lengte, Laadvermogen FROM AlgSchipInfo";
        SqlCommand oCmd = new SqlCommand(oString, thisConnection);

        thisConnection.Open();
        using (SqlDataReader oReader = oCmd.ExecuteReader())
        
            int i = 0;
            while (oReader.Read())
            // for (int i = 0; i < count; i++)
            

                System.Web.UI.htmlControls.HtmlGenericControl createDiv =
                new System.Web.UI.HtmlControls.HtmlGenericControl("DIV");
                createDiv.ID = "createDiv";
                this.Controls.Add(createDiv);
                List<TextBox> tb_names = new List<TextBox>();
                TextBox tb_name = new TextBox();

                //TextBox tb_name = new TextBox();
                tb_name.ID = "CreateT_" + i.ToString() + "_1";
                tb_name.Text = (oReader["SchipNaam"].ToString());
                createDiv.Controls.Add(new LiteralControl
                ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Scheepspnaam: <input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>"));
                tb_names.Add(tb_name);

                //TextBox tb_name1 = new TextBox();
                tb_name.ID = "CreateT_" + i.ToString() + "_2";
                tb_name.Text = (oReader["RederijNr"].ToString());
                createDiv.Controls.Add(new LiteralControl
                ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> RederijNr:<input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>"));
                tb_names.Add(tb_name);

                //TextBox tb_name2 = new TextBox();
                tb_name.ID = "CreateT_" + i.ToString() + "_3";
                tb_name.Text = (oReader["Lengte"].ToString());
                createDiv.Controls.Add(new LiteralControl
                ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Lengte  :<input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>"));
                tb_names.Add(tb_name);

                //TextBox tb_name3 = new TextBox();
                tb_name.ID = "CreateT_" + i.ToString() + "_4";
                tb_name.Text = (oReader["Laadvermogen"].ToString());
                createDiv.Controls.Add(new LiteralControl
                ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Laadvermogen:<input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>"));
                tb_names.Add(tb_name);
                i++;
            
        
    

我使用我的查询来查找四列,并使用我的数据阅读器来读取数据。 使用tb_name.text = (oReader["SchipMaam"].ToString()) 将填充文本框。我在这个谜题中缺少一块吗?

问题是当我使用它时我的文本框一直是空的。 到目前为止,我知道 DIV 或 ID 没有问题。 如何用我的数据库表列中的数据填充我的文本框?

如果你能指出我正确的方向,那就太好了。

【问题讨论】:

为什么要将所有文本框添加到 tb_names? 我希望每个文本框都有唯一的名称。我使用增量 int(int i 和 i++)来执行此操作,因此我可以始终对文本框进行特定更改。 为什么你有 TextBox tb_name = new TextBox();评论了吗? 这是我之前尝试过的一些旧代码。但是这个效果更好。 您能否编辑您的问题以解释哪些有效,哪些无效?问题只是 ID 不是唯一的还是还有其他问题。 【参考方案1】:

使用此代码,您从未为正在生成的&lt;input type='text' 标记赋值:

public void Schip()
    
    using (SqlConnection thisConnection = new SqlConnection("Data Source=VMB-LP12;Initial Catalog=SmmsData;Integrated Security=True"))
    
        string oString = "Select SchipNaam, RederijNr, Lengte, Laadvermogen FROM AlgSchipInfo";
        SqlCommand oCmd = new SqlCommand(oString, thisConnection);

        thisConnection.Open();
        using (SqlDataReader oReader = oCmd.ExecuteReader())
        
            int i = 0;
            while (oReader.Read())
            // for (int i = 0; i < count; i++)
            

                System.Web.UI.HtmlControls.HtmlGenericControl createDiv =
                new System.Web.UI.HtmlControls.HtmlGenericControl("DIV");
                createDiv.ID = "createDiv";
                this.Controls.Add(createDiv);
                List<TextBox> tb_names = new List<TextBox>();
                TextBox tb_name = new TextBox();

                //TextBox tb_name = new TextBox();
                tb_name.ID = "CreateT_" + i.ToString() + "_1";
                tb_name.Text = (oReader["SchipNaam"].ToString());
                createDiv.Controls.Add(new LiteralControl
                ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Scheepspnaam: <input type='text' value='" + tb_name.Text + "' id='" + tb_name.ID + "' runat='server'/></div></div></div>"));
                tb_names.Add(tb_name);

                //TextBox tb_name1 = new TextBox();
                tb_name.ID = "CreateT_" + i.ToString() + "_2";
                tb_name.Text = (oReader["RederijNr"].ToString());
                createDiv.Controls.Add(new LiteralControl
                ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> RederijNr:<input type='text' value='" + tb_name.Text + "' id='" + tb_name.ID + "' runat='server'/></div></div></div>"));
                tb_names.Add(tb_name);

                //TextBox tb_name2 = new TextBox();
                tb_name.ID = "CreateT_" + i.ToString() + "_3";
                tb_name.Text = (oReader["Lengte"].ToString());
                createDiv.Controls.Add(new LiteralControl
                ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Lengte  :<input type='text' value='" + tb_name.Text + "' id='" + tb_name.ID + "' runat='server'/></div></div></div>"));
                tb_names.Add(tb_name);

                //TextBox tb_name3 = new TextBox();
                tb_name.ID = "CreateT_" + i.ToString() + "_4";
                tb_name.Text = (oReader["Laadvermogen"].ToString());
                createDiv.Controls.Add(new LiteralControl
                ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Laadvermogen:<input type='text' value='" + tb_name.Text + "' id='" + tb_name.ID + "' runat='server'/></div></div></div>"));
                tb_names.Add(tb_name);
                i++;
            
        
    

【讨论】:

每个文本框在我的代码中都有一个唯一的 ID,因此我可以根据需要进行特定的更改。 tb_name.ID 正在回馈:CreateT0_1、CreatT0_2 和下一个序列 CreateT1_1。我在这里还缺少什么吗? 我希望每个 div 都有相同的 ID,这样我就可以同时在它们上使用我的 CSS。 为了 CSS 目的,使用类。页面上的 2 个元素不应具有相同的 ID。 你说的有道理,我会改的!但这与我的文本框并用数据填充它们没有任何关系,还是我错了? 文本框是由内部输入类型标签生成的,而不是由 tb_name 生成的。 tb_name 实际上从未被添加到 DIV。

以上是关于使用 datareader 用数据库多列中的数据填充文本框的主要内容,如果未能解决你的问题,请参考以下文章

DataReader 中的 DataReader

DataSet和DataReader问题

使用 datareader 中的股票数据时,Pandas 错误“没有要绘制的数字数据”

DataReader 中的倍数表

映射如何通过 .NET 中的 DataReader 通过 Load() 将数据读取到 DataTable?

通过python中的yahoo和pandas_datareader获取来自不同市场的市场数据