如何找到循环执行的最后一次(dr.Read())?

时间:2013-01-17 12:12:11

标签: c# asp.net

看看下面的while循环。

SqlDataReader dr;

while (dr.Read())
{

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

}

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

9 个答案:

答案 0 :(得分:3)

我会稍微重组一下。在读者之前,实例化一个假布尔值。在您第一次阅读后将其设置为true。然后,在您的读取代码中,添加if,添加逗号并中断到上一行。那么你不必担心它是否是最后一行,因为没有下一行可以添加逗号和中断。

答案 1 :(得分:2)

不完全确定您的确切需要,但基于:

  

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

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

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

如果你的字符串在末尾有逗号,它将删除它,如果它没有,它将保持字符串不变。

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

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

答案 2 :(得分: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());

答案 3 :(得分: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);

答案 4 :(得分: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] + "')");

        }

答案 5 :(得分: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

}

答案 6 :(得分:0)

查看此帖子 -

Check if it's the last record in sqldatareader

它显示了如何检查最后一个元素。

希望这会对你有所帮助。

答案 7 :(得分:0)

SqlDataReader dr;

while (dr.Read())
{

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

}

不是使用Response.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 :(得分: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的解决方案也运行良好。 非常感谢你们的帮助。