2010-02-23 57 views
0

我有一个循环,其是这样的:在vb.net循环计数器添加到现有的字符串

for i = 0 as integer to 100 
    result &= "Name" & sqldr("name") 
    result &= "Lastname" & sqldr("lastname") 
    result &= "dob" & sqldr("dob") 
next 

的sqldr是SQL DataReader的(这里并不重要)
我希望我的最终结果成为:

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

Name2 = 
... 
Name3 = 

等等,这取决于数据库中有多少记录。 我如何在这个for循环中做到这一点?

+0

附加循环计数器.... – 2010-02-23 00:30:27

回答

0

这将做到这一点:

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 

但是,有更好的表现,你应该使用string.FormatStringBuilder

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

StringBuilder的也有AppendFormat过载,使这个更容易:

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() 
+0

字符串连接在处理较大数字时效率不高,请使用StringBuilder代替。 – AxelEckenberger 2010-02-23 00:34:57

+0

@Obalix - 我很清楚这一点。我是编辑,当你添加您的评论;) – Oded 2010-02-23 00:40:03

+0

小幅回调到现有的问题 - 的结果应该有“申请人”前缀到它 Applicant1Name =“SAM ... Applicant2Name = ... – iregy 2010-02-23 00:46:10

1

那么,首先o f你应该使用一个StringBuilder,因为它比连接字符串更高效。

所以下面应该产生预期的结果(对不起,我还是aquainted到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() 
+0

我同意StringBuilder是一种更好的方式让他做到这一点,但是他说它需要遍历所发现的记录数,所以这意味着他需要从他的select语句中返回一个计数 – 2010-02-23 00:35:55

0

你需要在你的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 
+0

并且如上所述,您应该使用String.Format和StringBuilder以获得更好的性能。 – 2010-02-23 00:37:16

相关问题