3

看看下面的while循环。

SqlDataReader dr;

while (dr.Read())
{

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

}

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

4

8 回答 8

3

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

于 2013-01-17T12:16:55.943 回答
2

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

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

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

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

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

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

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

于 2013-01-17T12:13:48.040 回答
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]+"')");
}

但是,最好只使用 aStringBuilder在内存中构造字符串,然后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());
于 2013-01-17T12:17:40.977 回答
0

您可以使用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);
于 2013-01-17T12:14:20.000 回答
0
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);
于 2013-01-17T12:35:07.360 回答
0

恐怕你需要一个变量!

        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] + "')");

        }
于 2013-01-17T12:20:41.727 回答
0
    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 的解决方案也很有效。非常感谢你们的帮助。

于 2013-01-17T12:49:42.830 回答
0

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

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

}
于 2013-01-17T12:27:21.457 回答