C# 如何在执行(dr.Read())时查找循环的最后一次执行?
看看下面的while循环C# 如何在执行(dr.Read())时查找循环的最后一次执行?,c#,asp.net,C#,Asp.net,看看下面的while循环 SqlDataReader dr; while (dr.Read()) { Response.Write("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>"); } SqlDataReader-dr; while(dr.Read()) { 响应。写入(“插入测试值(N'+dr[0]+”,N'+dr[1]+”),”; } 我只是在打印一些结尾带有逗号的东西(在此之前)。但是最后一次当它
SqlDataReader dr;
while (dr.Read())
{
Response.Write("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>");
}
SqlDataReader-dr;
while(dr.Read())
{
响应。写入(“插入测试值(N'+dr[0]+”,N'+dr[1]+”),
”;
}
我只是在打印一些结尾带有逗号的东西(在此之前)。但是最后一次当它被打印出来的时候,我不想要那个逗号。
如何确定此循环是最后一次执行?因此,我可以通过修改逗号来避免打印该逗号。不完全确定您到底需要什么,但基于: 但是最后一次当它被打印出来的时候,我不想要那个逗号 您可以在退出循环后使用
string str = yourstring.TrimEnd(',');
如果字符串末尾有逗号,它将删除它,如果没有逗号,它将保留字符串原样
编辑:错过响应。编写部分
您可以在while循环中构建一个字符串,然后使用string.TrimEnd
,然后使用Response.Write
,使用新字符串 您可以使用删除最后一个逗号的方法
删除中指定的一组字符的所有尾部匹配项
来自当前字符串对象的数组
你应该遵循类似的指示
string str = null;
while (dr.Read())
{
str += "insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>";
}
str = str.TrimEnd(',');
Response.Write(str);
string str=null;
while(dr.Read())
{
str+=“插入测试值(N'+dr[0]+”,N'+dr[1]+”,
”;
}
str=str.TrimEnd(',');
反应。书写(str);
我会稍微调整一下。在读取器之前,实例化一个假布尔值。第一次阅读后,将其设置为true。然后,在读取代码中,如果为true,则在前一行中添加逗号和分隔符。这样,您就不必担心它是否是最后一行,因为没有下一行可以添加逗号和分隔符。一般来说,不知道您是否在while循环的最后一次迭代中。
您可以使用,其中不是最后一次,而是第一次运行的循环是不同的,如下所示:
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 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());
恐怕您需要一个变量
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] + "')");
}
bool first=true;
while(dr.Read())
{
if(first)first=false;
else响应。写(“,
”);
写入(“插入测试值(N'+dr[0]+”,N'+dr[1]+”)”;
}
像这样试试。。。这对你有帮助
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
}
inti=0;
while(dr.Read())
{
如果(i!=0)
{
响应。写入(“,
”);
}
写入(“插入测试值(N'+dr[0]+”,N'+dr[1]+”)”;
i++;
}
它解决了我的问题。和@SWeko的解决方案也很有效。
非常感谢大家的帮助。
响应。Write
已经对字符串做了任何处理,现在修剪已经太晚了。@SWeko,你是对的。我错过了。我认为在这种情况下,OP可以在while循环中构建字符串,然后调用Response。在修剪后的字符串上写入。感谢您的响应。看起来不错。但是该逗号将打印在第一行的前面,对吗?不,第一行在if
中处理,而不是在while
中处理。while
从第二行运行到最后一行。这种方法的缺点是,一些(几乎相同的)代码编写了两次,因此调试和维护比较困难。请核对我的答案。我希望它简单一点。好的。但我只需要在最后一次迭代时对其进行修剪。有什么方法可以找到它吗?在循环中的字符串上使用+=
是的。@SWeko是的,当然,在循环中的字符串上使用StringBuilder看起来更好,但在这种情况下,我不认为这会是一个大问题。。
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
}
SqlDataReader dr;
while (dr.Read())
{
Response.Write("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>");
}
while (dr.Read())
{
string yourstring = "insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>";
}
string str = yourstring.Substring(0, yourstring.Length - 1);
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++;
}