有一個相關的問題:將參數傳遞給SQLCommand的最佳方法是什么?但我想知道差異是什么,以及不同方式是否存在任何問題。我通常使用這樣的結構:using (SqlConnection conn = new SqlConnection(connectionString))using (SqlCommand cmd = new SqlCommand(SQL, conn)){ cmd.CommandType = CommandType.Text; cmd.CommandTimeout = Settings.Default.reportTimeout; cmd.Parameters.Add("type", SqlDbType.VarChar, 4).Value = type; cmd.Connection.Open(); using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { adapter.Fill(ds); } //use data }現在有幾種方法可以添加cmd參數,我想知道哪個是最好的:cmd.Parameters.Add("@Name", SqlDbType.VarChar, 20).Value = "Bob";cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = "Bob";cmd.Parameters.Add("@Name").Value = "Bob";cmd.Parameters.AddWithValue("@Name", "Bob");在我假設的變量傳遞中具有字段的長度是不可取的,因為它是可以在數據庫中稍后更改的魔術值。它是否正確?它是否會導致以這種方式(性能或其他)傳遞varchar的任何問題,我假設它默認為varchar(max)或數據庫等效。我很高興這會奏效。更關心我的部分是如果我使用上面列出的第三或第四個選項,則丟失SqlDbType枚舉我根本不提供類型。有沒有這種情況不起作用的情況我可以想象varchar被錯誤地轉換為char或者反之亦然的問題或者可能是帶有小數的問題....就數據庫而言,我認為字段類型的變化遠不如長度,因此值得保留?
3 回答
拉風的咖菲貓
TA貢獻1995條經驗 獲得超2個贊
通過添加類型,您的請求更有可能通過使用緩存查詢計劃來提高性能。
以下是MSDN的引用:
參數化命令還可以提高查詢執行性能,因為它們可以幫助數據庫服務器將傳入命令與正確的緩存查詢計劃精確匹配。
更多內容請參閱執行計劃緩存和重用。
鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
本文所描述的是,通過盡可能精確地定義參數,它更有可能是一個緩存的查詢計劃,它將被使用,然后具有更高的性能。子部分簡單參數化說明了這一點:在SQL Server中,在Transact-SQL語句中使用參數或參數標記增加了關系引擎將新SQL語句與現有的先前編譯的執行計劃相匹配的能力。
- 3 回答
- 0 關注
- 526 瀏覽
添加回答
舉報
0/150
提交
取消
