2011-08-29 117 views
1

我一直在長時間使用企業庫。我們正在將數據庫中的列類型varchar更改爲nvarchar以支持不同的語言。我們確實有一些使用傳統方式連接數據庫的傳統代碼,比如使用命令對象。在那個代碼中,當創建sqlparameters時,無論是int還是varchar,都會指定參數的數據類型。從varchar到nvarchar很容易。企業庫dbcommand AddInParameter方法

但我想知道在使用企業庫在這裏我們指定.NET數據類型一樣串,我相信企業庫調用存儲過程時,該類型轉換成內部sqldatatype。

db.AddInParameter(CMD 「@SortOrder」,DbType.String,SortOrder的)

什麼數據類型企業庫內部轉換? varchar或nvarchar?在我們擁有的遺留代碼中的所有地方使用nvarchar是否安全?

+1

無需擔心數據類型轉換.NET會照顧它,並自動處理它 – saber

+0

那麼爲什麼我們指定數據類型創建的SqlParameter對象或調用AddInParameter如果.NET需要的是關心什麼時候? – trainer

+0

.net能夠轉換那些可相互轉換的數據類型。例如它將二進制數組轉換爲圖像或將字符串轉換爲文本。 – saber

回答

0

正如我在評論說,沒有必要擔心數據類型轉換.NET會照顧它,並自動處理它。 ADO.net能夠將SqlServer中的String數據類型轉換爲varcharnvarchar,char,ntext,text數據類型。指定存儲過程數據類型可讓ADO.net將數據轉換爲SqlServer中的相應數據類型。

爲什麼我們在創建sqlparameter對象時指定數據類型,或者在.net注意到時調用AddInParameter?

編輯:在評論你的問題基地有:

db.Parameters.AddWithValue("@SortOrder", SortOrder); 

這是沒有必要指定輸入參數的數據類型。

0

我假設你正在使用SQL Server。

DbType.String是nvarchar的同時DbType.AnsiString是VARCHAR。 http://msdn.microsoft.com/en-us/library/system.data.dbtype.aspx

既然你調用存儲過程,您的參數會自動轉換任何字符串類型在存儲過程中被指定爲。例如,如果輸入是 DbType.String,但參數是varchar,則SQL Server會爲您進行轉換。不要做反向操作(在DbType.AnsiString中的代碼中,但存儲過程需要nvarchar),因爲只會在存儲過程中獲取ansi字符。

//Don't do this! you will get 'h?ello' in the SP instead of 'hܒello' 
SqlParameter("input", "h\u0712ello") { DbType = System.Data.DbType.AnsiString }); 

另外,在EntLib中,有一種方法可以調用存儲過程而無需指定參數名稱和數據類型。像這樣:

//calls AddToInventory stored procedure 
//the 2 parameters are automatically mapped. 
db.ExecuteNonQuery("AddToInventory", 1, "Life Jacket");