2008-10-08 93 views
5

訪問從數據庫中檢索的DataTable中的對象時,是否有任何理由不將該對象轉換爲所需的類型,還是有理由使用convert?我知道規則是在我們知道我們正在處理的數據類型時進行的,並在嘗試將數據類型更改爲不是時進行轉換。假定我們知道列中存儲了什麼數據類型,那麼演員似乎是合適的,但是有沒有任何數據庫類型問題,這意味着我們不能依靠這個問題?從數據庫檢索數據時進行轉換或轉換?

回答

4

我總是會投,因爲你說的原因。我知道,你需要處理的陷阱是:

  1. 你顯然需要能夠處理DBNulls(例如,通過與Convert.IsDBNull測試)

  2. 在我的ExecuteScalar的情況下,相信你需要檢查null和DBNull。

  3. 即使對於聲明爲INT的列,SQL Server @@ IDENTITY和SCOPE_IDENTITY函數也會返回數字(十進制)。在這種情況下,您可以將兩次「(int)(十進制)值」轉換爲T-SQL代碼,例如: 。

    INSERT INTO MyTable的... SELECT AutoIdColumn FROM MyTable的WHERE AutoIdColumn = SCOPE_IDENTITY()

INSERT INTO MyTable ... 
SELECT CAST(SCOPE_IDENTITY() AS INT) 
0

兩個CASTCONVERT用於顯式的一個的表達式轉換數據類型到另一個。但是,使用CONVERT,您也可以指定格式樣式。

語法CAST:

CAST (expression AS data_type [ (length) ]) 

語法CONVERT:

CONVERT (data_type [ (length) ] , expression [ , style ]) 
0

當從RDBMS retreiving你應該讓本地和請求類型的數據庫驅動程序句柄編組。

CAST受SQL標準認可,適用於最多數量的RDBMS平臺。

CONVERT可在較少的平臺上使用。

如果您有多平臺協調CONVERT只能用於特殊情況,例如用CAST無法實現的自定義格式。