2010-03-03 49 views
3

我需要用下面的代碼邏輯語法幫助:記錄2008

我有一個代碼塊,從數據庫中獲取電子郵件地址。電子郵件地址需要被分配到一個字符串變量strEmailAddress用逗號分離 -

我的代碼是:

SqlConnection conn = new SqlConnection(strConn); 
string sqlEmailAddress = "usp_Get_Email_Address"; 
SqlCommand cmdEmailAddr = new SqlCommand(sqlEmailAddress, conn); 
cmdEmailAddr.CommandType = CommandType.StoredProcedure; 
con.Open(); 
SqlDataReader sqlDREmailAddr = cmdEmailAddr.ExecuteReader(); 

我如何遍歷記錄和存儲用逗號分隔的strEmailAddress的結果?

回答

3

使用SqlDataReader.Read方法:

while (sqlDREmailAddr.Read()) 
{ 
... 
// Assumes only one column is returned with the email address 
strEmailAddress = sqlDREmailAddr.GetString(0); 
} 
+0

而(sqlDREmailAddr.read()){strEmailAddress = ?????} – user279521 2010-03-03 15:48:21

+0

我不知道你的存儲過程返回。它如何在datarecord中顯示? – Oded 2010-03-03 15:51:31

+0

它返回一個字符串;可以有多個記錄返回; – user279521 2010-03-03 15:53:23

5
while (sqlDREmailAddr.Read()) 
{ 
    //...process each row here 
} 

我也想包讀者一個using語句,以確保它是正確關閉:

using (SqlDataReader sqlDREmailAddr = cmdEmailAddr.ExecuteReader()) 
{ 
} 

根據什麼數據集中的列命名的,從每一個記錄讀取值會看像這樣(更新:現在所有的地址合併):

var emailAddress = new StringBuilder(); 
var emailAddressOrdinal = sqlDREmailAddr.GetOrdinal("EmailAddress"); 
while (sqlDREmailAddr.Read()) 
{ 
    if (emailAddress.Length > 0) 
     emailAddress.Append(','); 
    emailAddress.Append(sqlDREmailAddr.GetString(emailAddressOrdinal)); 
} 
+4

+1用於包裝閱讀器使用。 – Oded 2010-03-03 15:44:45

+0

而(sqlDREmailAddr.read()){ strEmailAddress = ????? } – user279521 2010-03-03 15:46:43

+0

@ user279521:用於級聯地址 – 2010-03-03 18:13:28

1
while (sqlDREmailAddr.Read()) 
    { 
    // handle row here 
    } 
+1

的測試HasRows添加的代碼是相當多餘的,因爲到'第一調用read()'會如果沒有行返回false。 – 2010-03-03 15:45:53

+0

我也這麼認爲,我最初的答案是沒有它......但在MSDN的例子中,他們都做到了。所以我把這兩個。 http://msdn.microsoft.com/en-us/library/haa3afyz%28VS.71%29.aspx – Gabe 2010-03-03 16:00:52

1

這是你要找的東西....

 
using (SqlConnection conn = new SqlConnection(strConn)){ 
    string sqlEmailAddress = "usp_Get_Email_Address"; 

    using (SqlCommand cmdEmailAddr = new SqlCommand(sqlEmailAddress, conn)){ 
     cmdEmailAddr.CommandType = CommandType.StoredProcedure; 

     conn.Open(); // Typo Glitch! 

     using (SqlDataReader sqlDREmailAddr = cmdEmailAddr.ExecuteReader()){ 

      while(sqlDREmailAddr.Read()){ 

       if (!sqlDREmailAddr.IsDBNull(sqlDREmailAddr.GetOrdinal("emailAddr"))){ 

       // HANDLE THE DB NULL... 

       }else{ 

       strEmailAddress = sqlDREmailAddr.GetSqlString(sqlDREmailAddr.GetOrdinal("emailAddr")); 

       // Do something with strEmailAddr... 

       } 
      } 
     } 
    } 

} 

注意:

  • conn變量A錯字毛刺。 ..
  • 進行檢查,以確保返回的數據庫值不爲NULL
  • 呼叫要GetOrdinal作出返回基於emailAddr字符串值,它對應於從查詢SQL SELECT ...這是一個int型)爲GetSqlString參數列列...

編輯:由於約翰·桑德斯您指出一個軼事!

編輯#2:感謝彼得Lillevold用於指出一個錯誤的拼寫...

希望這有助於 最好的問候, 湯姆。

+0

如何使用塊? – 2010-03-03 16:00:24

+1

將'GetOrdinal'移出循環。 「Read」與大寫字母R :) – 2010-03-03 17:20:42

+0

@Peter Lillevold:嘆息......希望有一些聰明的拼寫檢查工具可以發現那個......好的......好的趕上那裏...... :)不錯的一個+ 1爲了您的評論! – t0mm13b 2010-03-03 17:23:11

相關問題