2011-03-08 25 views
10

我接管了一些C#代碼。C#:DbType.String與DbType.AnsiString

該代碼正在碰到一個使用參數SQL的數據庫。

所有的字符串參數輸入爲DbType.AnsiString而不是DbType.String

爲什麼要使用DbType.AnsiString而不是DbType.String

回答

19

AnsiString
可變長度的非Unicode字符流,範圍介於1到8,000個字符之間。

字符串
表示Unicode字符串的類型。

在數據庫:

的nchar和nvarchar是unicode

CHAR和VARCHAR是非Unicode的

+0

+1。爲什麼有人使用NOE的AnsiString它是數據庫中的一個非Unicode字符串?把我當作邏輯來解釋。 – TomTom 2011-03-08 07:40:02

+0

DbType.AnsiString是DbType.String的子集嗎? – 2011-03-08 07:49:07

+0

在這種情況下什麼是'unicode'字符? – 2011-03-08 07:53:30

6

你會使用AnsiString類型,而不是字符串,以避免在您的SQL Server數據庫的隱式轉換。

即當您將一個字符串變量傳遞到MSSQL時,它顯示爲nvarchar(max)。鑑於事實上設計良好的數據庫可以使用varchars而不是默認的nvarchars(除非對非拉丁字符集有業務要求)。

在這種情況下,字符串變量將導致數據庫中的隱式轉換。這可以使引擎無法使用某些索引並執行全表掃描(數據庫性能的所有邪惡根源之一)