有一個(gè)相關(guān)的問題:將參數(shù)傳遞給SQLCommand的最佳方法是什么?但我想知道差異是什么,以及不同方式是否存在任何問題。我通常使用這樣的結(jié)構(gòu):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 }現(xiàn)在有幾種方法可以添加cmd參數(shù),我想知道哪個(gè)是最好的: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");在我假設(shè)的變量傳遞中具有字段的長(zhǎng)度是不可取的,因?yàn)樗强梢栽跀?shù)據(jù)庫中稍后更改的魔術(shù)值。它是否正確?它是否會(huì)導(dǎo)致以這種方式(性能或其他)傳遞varchar的任何問題,我假設(shè)它默認(rèn)為varchar(max)或數(shù)據(jù)庫等效。我很高興這會(huì)奏效。更關(guān)心我的部分是如果我使用上面列出的第三或第四個(gè)選項(xiàng),則丟失SqlDbType枚舉我根本不提供類型。有沒有這種情況不起作用的情況我可以想象varchar被錯(cuò)誤地轉(zhuǎn)換為char或者反之亦然的問題或者可能是帶有小數(shù)的問題....就數(shù)據(jù)庫而言,我認(rèn)為字段類型的變化遠(yuǎn)不如長(zhǎng)度,因此值得保留?
3 回答

拉風(fēng)的咖菲貓
TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
通過添加類型,您的請(qǐng)求更有可能通過使用緩存查詢計(jì)劃來提高性能。
以下是MSDN的引用:
參數(shù)化命令還可以提高查詢執(zhí)行性能,因?yàn)樗鼈兛梢詭椭鷶?shù)據(jù)庫服務(wù)器將傳入命令與正確的緩存查詢計(jì)劃精確匹配。
更多內(nèi)容請(qǐng)參閱執(zhí)行計(jì)劃緩存和重用。

鳳凰求蠱
TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
本文所描述的是,通過盡可能精確地定義參數(shù),它更有可能是一個(gè)緩存的查詢計(jì)劃,它將被使用,然后具有更高的性能。子部分簡(jiǎn)單參數(shù)化說明了這一點(diǎn):在SQL Server中,在Transact-SQL語句中使用參數(shù)或參數(shù)標(biāo)記增加了關(guān)系引擎將新SQL語句與現(xiàn)有的先前編譯的執(zhí)行計(jì)劃相匹配的能力。
- 3 回答
- 0 關(guān)注
- 508 瀏覽
添加回答
舉報(bào)
0/150
提交
取消