2010-02-23 58 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

相關問題