在不使用数据集的情况下将db内容打印到多个文本框中

时间:2012-04-03 17:28:57

标签: c# sql textbox sqldatareader

using Visual.Web.Developer.2010.Express;
using SQL.Server.Management.Studio.2008.R2;


有点新的C#这里..
我得到了第一排,但我如何检索其余的值?
我设置了一些文本框,并将sqldatareader放入第一个文本框investigate1。现在,我已经设置好所有文本框都打印出该列的第一行。坚持这一部分..想要让其他人在那里...价值" a"进入investigate1,值" b"进入investigate2等。感谢您查找

我的相关代码

HTML。

<asp:TextBox ID="investigate1" class="hexen" runat="server"></asp:TextBox><br />
<asp:TextBox ID="investigate2" class="hexen" runat="server"></asp:TextBox><br />
<asp:TextBox ID="investigate3" class="hexen" runat="server"></asp:TextBox><br />
<asp:TextBox ID="investigate4" class="hexen" runat="server"></asp:TextBox><br />
<asp:TextBox ID="investigate5" class="hexen" runat="server"></asp:TextBox><br />


C#

 try
            {

                ConnFlux.Open();

                SqlCommand CmdFlux1 = new SqlCommand("select TbValue from InvestigateValues where TbId = '1'", ConnFlux);


                RdrFlux1 = CmdFlux1.ExecuteReader();



                while (RdrFlux1.Read())
                {
                    investigate1.Text = RdrFlux1.GetValue(0).ToString();
                    investigate2.Text = RdrFlux1.GetValue(0).ToString();// What would I have
                    investigate3.Text = RdrFlux1.GetValue(0).ToString();// to change about these
                    investigate4.Text = RdrFlux1.GetValue(0).ToString();// to print the corresponding
                    investigate5.Text = RdrFlux1.GetValue(0).ToString();// values to the corresponding textbox?

                }
            }






sqldb
是的,这些是此数据库中仅有的两列
My Sql database

3 个答案:

答案 0 :(得分:3)

您可能希望使用Repeater控件进行调查,而不是使用5个单独的TextBox控件。当数据库中有多于或少于5条记录时,Repeater控件将能够处理这些情况。

答案 1 :(得分:1)

你必须这样改变它:

更改您的查询...

SqlCommand CmdFlux1 = new SqlCommand("select TbValue from InvestigateValues order by TbId", ConnFlux);

现在这样做:

RdrFlux1.Read();
investigate1.Text = RdrFlux1.GetValue(0).ToString();
RdrFlux1.Read();
investigate2.Text = RdrFlux1.GetValue(0).ToString();
RdrFlux1.Read();
investigate3.Text = RdrFlux1.GetValue(0).ToString();
RdrFlux1.Read();
investigate4.Text = RdrFlux1.GetValue(0).ToString();
RdrFlux1.Read();
investigate5.Text = RdrFlux1.GetValue(0).ToString();

你有它,一段可怕的代码完全符合你的需要。 认真,看看@Michael Bowersox的回答;如果每行都有一个文本框,那么我会感到惊讶。

也许你应该做这样的事情:

  • 删除查询的where部分以获取所有行。
  • 使用DataTable data = new DataTable(); data.Load(CmdFlux1.ExecuteReader());创建一个DataTable,用于保存其Rows属性中的所有行。
  • 迭代DataTable并创建表示数据集的对象列表。
  • 将对象列表指定为GridView,Repeater,DataList或其他呈现动态数据集的控件的DataSource。

类似的东西,或多或少取决于很多东西。

答案 2 :(得分:0)

你的意思是这样的吗?

// ...

if (RdrFlux1.Read()) {
    investigate1.Text = RdrFlux1.GetValue(0).ToString();
    if (RdrFlux1.Read()) {
        investigate2.Text = RdrFlux1.GetValue(0).ToString();
        if (RdrFlux1.Read()) {
            investigate3.Text = RdrFlux1.GetValue(0).ToString();
            if (RdrFlux1.Read()) {
                investigate4.Text = RdrFlux1.GetValue(0).ToString();
                if (RdrFlux1.Read())
                    investigate5.Text = RdrFlux1.GetValue(0).ToString();
             }
        }
    }
}

如果查询结果中的行数很少,则只会忽略丢失的行(并将之前的内容保留在其余文本框中)。如果行数太多,则只会忽略“溢出”行。真正的错误处理留给读者练习。

顺便说一句,由于TbValue似乎是(n)varchar,您可以使用SqlDataReader.GetString代替GetValue + ToString