2012-03-19 72 views
4

我嘗試兩種不同的方式來實例化我SqlParameter對象從C#傳遞的SqlParameter沒有數據類型 - 性能考慮

SQLParameter p = new SqlParameter("@DatabaseId", SqlDbType.VarChar, 5, Quarter.DataBaseId.ToString(); //line 1 

SQLParameter p = new SqlParameter("@DatabaseId", Quarter.DataBaseId); // line 2 

我想知道是否有任何性能問題,當你不使用的數據類型和長度,同時創造參數? SQL Server如何在內部處理?最初,我認爲它會隱式地將參數數據類型轉換爲與Ex進行比較的表列的數據類型。在sql查詢的where子句中。但我不確定。任何幫助將不勝感激。

在此先感謝

回答

4

我不認爲性能是主要問題就在這裏 - 儘管,用繩子(VARCHAR)的參數,如果沒有指定長度,ADO.NET運行時將設置最大該參數的實際長度,可能會或可能不會是這樣一個偉大的想法的長度....

但是:沒有明確指定這種說法的數據類型:

SqlParameter p = new SqlParameter("@DatabaseId", Quarter.DataBaseId); 

具有潛在的巨大問題是ADO.NET運行時必須guess你想要使用什麼數據類型。它在大部分時間都做得很好。但是如果你提供一個NULL值,它應該如何猜測數據類型?或者如果你提供50 - 是INTSmallIntTinyIntBigInt

未明確指定SqlParameter類型可能會導致不需要的轉換 - 這可能會降低性能。但更糟的是:它可能導致徹底的錯誤,因爲如果ADO.NET運行時的猜測是關閉的,那麼最終可能會出現運行時錯誤(例如,當它無法正確猜測某些東西是DATETIME等)。