我已經看到不同的方式從SQL中檢索字符串字段。有沒有「正確」的方式,有什麼區別有沒有正確的方法來檢索SQL中的字符串字段
SqlDataReader rdr;
1. String field = (String) rdr["field"];
2. String field = rdr["field"].ToString();
3. String field = rdr["field"] As String;
謝謝!如果類型是不串
我已經看到不同的方式從SQL中檢索字符串字段。有沒有「正確」的方式,有什麼區別有沒有正確的方法來檢索SQL中的字符串字段
SqlDataReader rdr;
1. String field = (String) rdr["field"];
2. String field = rdr["field"].ToString();
3. String field = rdr["field"] As String;
謝謝!如果類型是不串
所以,爲了安全起見 - 我會選擇3
如果我期待一個字符串,我會做#1。如果由於某種原因該字段不是字符串或更改類型,您至少可以通過異常機制瞭解它。 (不要把它包裝一個try /空的catch內。)
您還可以使用:
int ordinal=rdr.GetOrdinal("stringField");
if (rdr.IsDBNull(ordinal))
{
return string.Empty; //Or null or however you want to handle it
}
else
{
rdr.GetString(ordinal);
}
哪,如果你看一下定義SqlDataReader的[「字段」]的樣子:
public override object this[string name]
{
get
{
return this.GetValue(this.GetOrdinal(name));
}
}
基本上這是做同樣的事情,只是它的類型安全。我喜歡做的是創建我自己的包裝SqlDataReader的IDataReader。 CSLA使用一種稱爲SafeDataReader的simillar機制,因爲它爲所有實現此模式的各種數據類型提供重載。
如果您知道該字段不爲空,您可以省略isDbNull檢查。由於冗長,我建議把它放在某種類型的包裝器或幫助器類中,並使它們不起作用。
請記住,該問題與您的數據定義相互作用。如果「field」被定義爲「Not Null」,那麼你不必擔心空數據,並應該選擇#1來提高可讀性。同樣,如果該字段爲空,但做你的查詢,當您使用「ISNULL」功能:
Select IsNull(Field1, '') as Field1 From DBTable Where...
,話又說回來,你應該選擇#1,因爲你仍然不擔心空。當然,這假定你想要空值被空字符串掩蓋。如果你想測試對空,因爲它是一個錯誤條件,那麼你就必須像邏輯:
if (nwReader.IsDBNull(nwReader.GetOrdinal("Field1")))
*throw exception or otherwise handle null condition
string aStr = (string)nwReader["field"];
最後一種情況,但是,是不是真的好做法。如果null是一個無效值 - 一個錯誤條件 - 那麼你應該在你的DDL中排除它。儘管如此,我總是選擇#1,因爲我認爲它導致了更好的可讀性,並迫使我明確地使用空處理。
我喜歡?? (如其他帖子中所討論的)
String field = rdr [「field」] As String ?? string.Empty
這應該有效。如果沒有,那麼晚了:P,除非你真的想要結果爲空。如果是這樣,那麼我喜歡3.
其實在(2)它不會引發null的異常。你得到一個空字符串。 – LeJeune 2009-01-02 20:41:05