我接管了一些C#代碼。C#:DbType.String與DbType.AnsiString
該代碼正在碰到一個使用參數SQL
的數據庫。
所有的字符串參數輸入爲DbType.AnsiString
而不是DbType.String
。
爲什麼要使用DbType.AnsiString
而不是DbType.String
?
我接管了一些C#代碼。C#:DbType.String與DbType.AnsiString
該代碼正在碰到一個使用參數SQL
的數據庫。
所有的字符串參數輸入爲DbType.AnsiString
而不是DbType.String
。
爲什麼要使用DbType.AnsiString
而不是DbType.String
?
AnsiString
可變長度的非Unicode字符流,範圍介於1到8,000個字符之間。
字符串
表示Unicode字符串的類型。
在數據庫:
的nchar和nvarchar是unicode
CHAR和VARCHAR是非Unicode的
你會使用AnsiString類型,而不是字符串,以避免在您的SQL Server數據庫的隱式轉換。
即當您將一個字符串變量傳遞到MSSQL時,它顯示爲nvarchar(max)。鑑於事實上設計良好的數據庫可以使用varchars而不是默認的nvarchars(除非對非拉丁字符集有業務要求)。
在這種情況下,字符串變量將導致數據庫中的隱式轉換。這可以使引擎無法使用某些索引並執行全表掃描(數據庫性能的所有邪惡根源之一)
+1。爲什麼有人使用NOE的AnsiString它是數據庫中的一個非Unicode字符串?把我當作邏輯來解釋。 – TomTom 2011-03-08 07:40:02
DbType.AnsiString是DbType.String的子集嗎? – 2011-03-08 07:49:07
在這種情況下什麼是'unicode'字符? – 2011-03-08 07:53:30