2013-10-29 55 views

回答

0

reader.GetString(index);

這將讓在該列索引作爲字符串的行值,第二個解決方案是比較理想的,因爲它可以讓你在自己的首選類型的索引中獲得的價值。

實施例: -

String name = reader["Name"].ToString(); 
int age = (int) reader["Age"] 
的[DataReader的最佳實踐]
+1

如果int或字符串索引器更高效,這將如何回答? –

0
ad.Name = reader["Name"].ToString(); 

這是最有效的方式。

因爲儘管您更改了數據庫表結構後綴,但由於您直接提到了列名,因此對此代碼沒有影響。

但是,對於列索引,在向此列添加任何列時,它將發生更改。

+2

這可能是更好的可讀性和不太容易出錯,但由於需要首先找到序號,因此效率不高。如果你以循環的方式做了數百萬次,那麼將其置於循環之上會更有效率。 –

3

name過載需要先找到索引。

MSDN

一個區分大小寫的查找首先執行。如果失敗,則進行第二次 不區分大小寫的搜索(使用數據庫歸類完成不區分大小寫的比較 )。 比較受文化特定的套管規則影響時可能會發生意外的結果。對於 示例,在土耳其語中,以下示例產生了錯誤的結果 ,因爲土耳其文件系統不使用語言套管 關於「文件」中字母'i'的規則。

Getordinal(其因此使用):

由於基於序的查找比命名查找更有效率, 是低效率的一個循環內調用GetOrdinal時。節省時間 調用GetOrdinal一次,並將結果賦值給循環內使用的整數變量 。

因此,在循環中查找序號索引一次並在循環體中重用它可能更有效。

但是,名稱查詢由class支持,它使用的是效率非常高的HashTable