【问题标题】:How to find the last time execution of the loop while(dr.Read())?如何找到循环的最后一次执行while(dr.Read())?
【发布时间】:2013-01-17 12:12:10
【问题描述】:

看看下面的while循环。

SqlDataReader dr;

while (dr.Read())
{

Response.Write("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>");

}

我只是在最后打印一些带有逗号的东西(在那之前
)。但是最后一次打印时,我不想要那个逗号。 如何找出这个循环是最后一次执行?这样我就可以通过修改它来避免打印这个逗号。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    我会稍微调整一下。在你的读者面前,实例化一个错误的布尔值。在您第一次阅读后将其设置为 true。然后,在您阅读的代码中,添加如果为真,添加逗号和中断到上一行。那你就不用担心是不是最后一行了,因为加逗号和换行就没有下一行了。

    【讨论】:

      【解决方案2】:

      一般来说,不知道您是否处于 while 循环的最后一次迭代是不可能的。 您可以使用loop-and-a-half,其中不是最后一次,但循环的第一次运行是不同的,如下所示:

      SqlDataReader dr = ...;
      
      if (dr.Read())
      {
        //no comma
        Response.Write("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"')");
      }
      
      while (dr.Read())
      {
        //put in a comma / break for the previous item
        Response.Write(",<br>insert into test values(N'"+dr[0]+"', N'"+dr[1]+"')");
      }
      

      但是,最好只使用StringBuilder 在内存中构造字符串,然后Response.Write 一次完成,如下所示:

      StringBuilder sb = new StringBuilder();    
      while (dr.Read())
      {
        //put in a comma / break for the previous item
        sb.Append("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>");
      }
      sb.Remove(sb.Length-5,5); // remove the last ,<br>
      
      Response.Write(sb.ToString());
      

      【讨论】:

      • 感谢您的回复。这看起来不错的样子。但是那个逗号会打印在第一行的前面吗?
      • 不,第一行在if 中处理,而不是在while 中处理。 while 从第二行到最后一行。这种方法的缺点是一些(几乎相同的)代码被编写了两次,因此更难调试和维护。
      • 我试过了,效果很好。请检查我的回答。我希望它更简单一点。
      【解决方案3】:

      不完全确定您到底需要什么,但基于:

      但最后一次打印时,我不想要那个逗号。

      退出循环后可以使用string.TrimEnd

      string str = yourstring.TrimEnd(',');
      

      如果您的字符串末尾有逗号,它将删除它,如果没有,它将保留字符串原样。

      编辑:错过了 Respose.Write 部分。

      您可以在 while 循环中构建一个字符串,然后使用 string.TrimEnd 并稍后将 Response.Write 与新字符串一起使用。

      【讨论】:

      • Response.Write 已经对字符串做了任何处理,之后再修剪它为时已晚。
      • @SWeko,你是对的。我错过了。我认为在这种情况下,OP可以在while循环中构建字符串,然后在修剪后的字符串上调用Response.Write
      【解决方案4】:

      恐怕你需要一个变量!

              bool first=true;
              while (dr.Read())
              {
                  if (first) first = false;
                  else Response.Write(",<br>");
                  Response.Write("insert into test values(N'" + dr[0] + "', N'" + dr[1] + "')");
      
              }
      

      【讨论】:

        【解决方案5】:

        您可以使用TrimEnd 方法删除最后一个逗号。

        删除所有尾随出现的指定字符集 当前 String 对象的数组

        str.TrimEnd(',');
        

        您应该遵循与这些类似的说明;

        string str = null;
        while (dr.Read())
        {
        
        str += "insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>";
        
        }
        
        str = str.TrimEnd(',');
        Response.Write(str);
        

        【讨论】:

        • Gonul 好的。但我只需要在最后一次迭代时修剪它。有什么办法可以找到吗?
        • 在循环中的字符串上使用+=terrible for performance
        • @SWeko 是的,当然,StringBuilder 在循环中的字符串上看起来是更好的选择,但在这种情况下,我不认为这可能是个大问题..
        【解决方案6】:

        试试这样...它会帮助你..

        SqlDataReader dr;
        
        DataTable dt = new DataTable();
        
        dt.Load(dr);
        
        int _RowCount = dt.Rows.Count;
        
        int inc = 0 ; 
        
        
        while (dr.Read())
        {
        
        inc = inc + 1;
        
        if(inc==_RowCount)
        
        //Without Comma
        
        else
        
        //With Comma
        
        }
        

        【讨论】:

          【解决方案7】:
          SqlDataReader dr;
          
          while (dr.Read())
          {
          
          Response.Write("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>");
          
          }
          

          不要使用 Respose.Write,而是将字符串放在像这样的变量中

          while (dr.Read())
              {
          
             string yourstring =  "insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>";
          
              }
          

          在循环之后你可以使用

          string str = yourstring.Substring(0, yourstring.Length - 1);
          

          【讨论】:

            【解决方案8】:
                int i = 0;
                while (dr.Read())
                {
                    if (i != 0)
                    {
                        Response.Write(",<br>");
                    }
                    Response.Write("insert into test values(N'" + dr[0] + "', N'" + dr[1] + "')");
                    i++;
                }
            

            它解决了我的问题。@SWeko 的解决方案也很好用。 非常感谢你们的帮助。

            【讨论】:

              猜你喜欢
              • 2016-04-23
              • 1970-01-01
              • 2013-08-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-03
              • 2023-04-02
              • 1970-01-01
              相关资源
              最近更新 更多