在C#中,哪一種更有效的方式來讀取reader對象,通過整數索引或通過命名索引?在C#中用Sql Server從閱讀器讀取數據
ad.Name = reader.GetString(0);
OR
ad.Name = reader["Name"].ToString();
在C#中,哪一種更有效的方式來讀取reader對象,通過整數索引或通過命名索引?在C#中用Sql Server從閱讀器讀取數據
ad.Name = reader.GetString(0);
OR
ad.Name = reader["Name"].ToString();
reader.GetString(index);
這將讓在該列索引作爲字符串的行值,第二個解決方案是比較理想的,因爲它可以讓你在自己的首選類型的索引中獲得的價值。
實施例: -
String name = reader["Name"].ToString();
int age = (int) reader["Age"]
的[DataReader的最佳實踐]
如果int或字符串索引器更高效,這將如何回答? –
ad.Name = reader["Name"].ToString();
這是最有效的方式。
因爲儘管您更改了數據庫表結構後綴,但由於您直接提到了列名,因此對此代碼沒有影響。
但是,對於列索引,在向此列添加任何列時,它將發生更改。
這可能是更好的可讀性和不太容易出錯,但由於需要首先找到序號,因此效率不高。如果你以循環的方式做了數百萬次,那麼將其置於循環之上會更有效率。 –
name
過載需要先找到索引。
一個區分大小寫的查找首先執行。如果失敗,則進行第二次 不區分大小寫的搜索(使用數據庫歸類完成不區分大小寫的比較 )。 比較受文化特定的套管規則影響時可能會發生意外的結果。對於 示例,在土耳其語中,以下示例產生了錯誤的結果 ,因爲土耳其文件系統不使用語言套管 關於「文件」中字母'i'的規則。
從Getordinal
(其因此使用):
由於基於序的查找比命名查找更有效率, 是低效率的一個循環內調用GetOrdinal時。節省時間 調用GetOrdinal一次,並將結果賦值給循環內使用的整數變量 。
因此,在循環中查找序號索引一次並在循環體中重用它可能更有效。
但是,名稱查詢由class支持,它使用的是效率非常高的HashTable
。
可能重複(http://stackoverflow.com/questions/1855556/datareader-best-practices) – CodingIntrigue