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

时间:2012-08-02 17:04:00

标签: c# vb.net

这可能很容易,但我遇到了问题。

这是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中选择field1,field2等

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

希望我的解释清楚。

非常感谢

1 个答案:

答案 0 :(得分:0)

请记住,我对其他代码的外观一无所知,这是我最好的猜测。

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.