如何修改WHILE循环以包含SELECT语句中的更多列

本文关键字:语句 SELECT 包含 何修改 修改 循环 WHILE | 更新日期: 2024-09-22 00:59:12

这可能很容易,但我有问题。

这里是sql位:

Dim strSQL As String = ("SELECT field1 FROM myTable WHERE key like '%' + strkey + '%'")

    While oReader.Read()
        With oReader
            Dim li As New ListItem(oReader(0).ToString())
            fday.Items.Add(li)
        End With 'end With
    End While 'End While

然后在标记页面上,我有这样的:

   <asp:CheckBoxList runat="server" ID="fday" style="text-align:center;cursor:pointer;color:blue;text-decoration:underline;" CssClass="checkAll"> 
   </asp:CheckBoxList>

这很好用。

但是,我们被要求添加更多的字段,以便在标记页面上有额外的控件。

例如:

  <table>
   <tr>
    <td>
           <asp:CheckBoxList runat="server" ID="fday" style="text-align:center;cursor:pointer;color:blue;text-decoration:underline;" CssClass="checkAll"> 
   </asp:CheckBoxList>
   </td>
   <td><asp:TextBox id="tb3" runat="server" /></td>
  </tr>
 </table>

通过这种方式,我们可以通过向查询添加更多列来获得更多列的数据,如mytable 中的select field1、field2等

如何修改WHILE循环以在查询中包含附加列?

希望我的解释清楚。

非常感谢

如何修改WHILE循环以包含SELECT语句中的更多列

请记住,我对您的其他代码一无所知,下面是我对一个示例的最佳猜测。

Dim strSQL As String = ("SELECT * FROM myTable WHERE key like '%' + strkey + '%'")
Dim i as integer
i = 0
While oReader.Read()
    With oReader
        while true
            Dim li As New ListItem(oReader(i).ToString())
            if (li is Nothing)//isNull check
                break
            else
                fday.Items.Add(li)
        End While 
    End With 
End While 

还有两件事需要牢记。我主要是一名C#程序员,所以如果这看起来很奇怪,或者使用了在VB中有不同等价物的东西,请自己翻译。另一方面,我不确定oReader是什么,也不确定如果i超出范围,它会有什么样的行为。这段代码很可能会读取所有列,然后生成IndexOutOfRangeException。

----

如果您确切地知道将有多少列,那么使用具有严格边界的for循环比while循环更好。for i = 0; i < X; i++,其中X是实际拥有的列数。

----

现在,我们面临的最大问题是,您以一种奇怪的方式描述了这一点,并且忘记添加一个asp。Net标记。实际上,你需要的不是while循环,只有当你想在fDay中添加更多的列时,它才会起作用。如果你在处理泛型,你需要创建泛型,否则你需要对所有东西进行硬编码。

Dim strSQL As String = ("SELECT field1, field2 FROM myTable WHERE key like '%' + strkey + '%'")
While oReader.Read()
    With oReader
        Dim li As New ListItem(oReader(0).ToString())
        fday.Items.Add(li)
        Dim txt as New TextBox()
        txt.Text = oReader(1).ToString()
        //store txt somewhere permanent?
    End With 'end With
End While 'End While

我想这更像你想要的。如果不是这样,那么就要更加具体地了解您正在处理的数据结构以及每行数据实际包含的内容。您可能(可能)需要fDay的不同数据结构来保存新数据,以便每条记录显示所有字段,而不仅仅是1。