Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vb.net中为循环添加一个计数器到现有字符串_Vb.net_Loops_For Loop - Fatal编程技术网

在vb.net中为循环添加一个计数器到现有字符串

在vb.net中为循环添加一个计数器到现有字符串,vb.net,loops,for-loop,Vb.net,Loops,For Loop,我有一个for循环,它是这样的: for i = 0 as integer to 100 result &= "Name" & sqldr("name") result &= "Lastname" & sqldr("lastname") result &= "dob" & sqldr("dob") next sqldr是sql数据读取器,在这里并不重要 我希望我的最终结果是: Name1 = Sam Lastname1 =

我有一个for循环,它是这样的:

for i = 0 as integer to 100
    result &= "Name" & sqldr("name")
    result &= "Lastname" & sqldr("lastname")
    result &= "dob" & sqldr("dob")
next
sqldr是sql数据读取器,在这里并不重要 我希望我的最终结果是:

Name1 = Sam
Lastname1 = Davis
dob1 = 01/01/1966

Name2 = 
...
Name3 = 
等等,这取决于数据库中有多少记录。 如何在这个for循环中实现这一点?

这样就可以了:

for i = 0 as integer to 100
    result &= "ApplicantName" & i.ToString() & " = " & sqldr("name")
    result &= "Lastname" & i.ToString() & " = " sqldr("lastname")
    result &= "dob" & i.ToString() & " = " sqldr("dob") & "\n\n"
next
但是,为了获得更好的性能,您应该使用和:

StringBuilder还有一个重载,这使它更加容易:

Dim sb as StringBuilder = new StringBuilder()
for i = 0 as Integer to 100
    sb.AppendFormat("ApplicantName{0} = {1}", i, sqldr("name")
    sb.AppendFormat("Lastname{0} = {1}", i, sqldr("lastname")
    sb.AppendFormat("dob{0} = {1}\n\n", i, sqldr("dob")
next
Dim result as String = sb.ToString()

首先,您应该使用StringBuilder,因为它比串联字符串更有效

因此,以下应该会产生预期的结果,对不起,我是C:

Dim sb as StringBuilder = new StringBuilder() ' that is where I am not so sure

for i = 0 as integer to 100
    sb.AppendFormat("Name{0} = {1}", i, sqldr("name")
    sb.AppendFormat("Lastname{0} = {1}", i, sqldr("lastname")
    sb.AppendFormat("dob{0} = {1}", i, sqldr("dob")
next

result = sb.ToString()

在For循环之前,您需要进行一次选择。select将获取返回的记录总数。将该数字存储在变量中

Dim sqlcount as integer = 100 'this should actually be the result of your sql query
for i = 0 as integer to sqlcount
    result &= "Name" & sqldr("name")
    result &= "Lastname" & sqldr("lastname")
    result &= "dob" & sqldr("dob")
    i = i + 1
next

当处理较大的数字时,字符串连接不是很有效,请改用StringBuilder。@Obalix-我很清楚这一点。你添加评论时我正在编辑;对现有问题的轻微更正-结果应在其上有申请人前缀Application1Name=sam。。。application2name=…@wedds-真的吗?你自己搞不清楚从名称到应用程序名称的变化吗?做个好人,我没有你那么聪明。我同意StringBuilder是一个更好的方法,但是他说它需要循环找到的记录数。这意味着他需要从select语句返回一个计数。是的,如上所述,您应该使用String.Format和StringBuilder来获得更好的性能。
Dim sqlcount as integer = 100 'this should actually be the result of your sql query
for i = 0 as integer to sqlcount
    result &= "Name" & sqldr("name")
    result &= "Lastname" & sqldr("lastname")
    result &= "dob" & sqldr("dob")
    i = i + 1
next