台灣最大程式設計社群網站
線上人數
1134
 
會員總數:246691
討論主題:190104
歡迎您免費加入會員
討論區列表 >> C# >> SQL帶入副程式使用Parameters,Command卻沒有改變
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
SQL帶入副程式使用Parameters,Command卻沒有改變
價值 : 50 QP  點閱數:1171 回應數:8
樓主

bnn00023
初學者
100 1
155 5
發送站內信

請問各位高手:
最近寫的程式使用MSSQL的需求量挺大的,所以我在繼承的FormBase中寫了個副程式,主程式使用Parameters之後command的字串沒有被帶入數值就進了副程式中,請問有什麼辦法可以解決嗎?

主程式


副程式



輸出
select 權限 from Hrm人員權限 where EmpID=@EmpID


搜尋相關Tags的文章: [ C# ] , [ SQL ] , [ 副程式 ] ,
本篇文章發表於2017-08-03 11:19
1樓
作者回應

bnn00023
檢舉此回應
之所以沒有用字串相加是因為安全性問題,或是有另一種方法有顧慮安全性的香佳方法嗎?
本篇文章回覆於2017-08-03 11:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

小魚
檢舉此回應
那就在副程式加入Parameter吧,
或是先加在Command裡面再帶進去副程式試試看.
本篇文章回覆於2017-08-03 12:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

QZ_CHUNG
檢舉此回應
記得沒錯的話,

com.Parameters.AddWithValue("@EmpID", this.EmpID);

是在連DB後才會寫入參數,

所以你在副程式那才會沒帶入參數,


不過我找不到出處,也很怕是我記錯,若有記錯還麻煩前輩指點我,謝謝
本篇文章回覆於2017-08-03 13:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

bnn00023
檢舉此回應
如果遇到where中有兩個判斷式,這樣就要改變副程式中的參數了,或是我新增、修改也想要使用副程式,這樣子要Parameter的參數肯定不只一個,還是可以利用arg進行不定數的參數傳導,不定數的參數,還不太懂,請各位前輩們賜教。
本篇文章回覆於2017-08-03 13:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

春天
檢舉此回應
在使用參數化查詢的情況下,資料庫伺服器不會將參數的內容視為SQL指令的一部份來處理,而是 "在資料庫完成SQL指令的編譯後,才套用參數執行" ,因此就算參數中含有具破壞性的指令,也不會被資料庫所執行。
來源
本篇文章回覆於2017-08-03 15:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

春天
檢舉此回應
你可以去看看DataTable有沒有正確取出資料
本篇文章回覆於2017-08-03 15:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

QZ_CHUNG
檢舉此回應
在副程式用SQLParameter Array來接參數

並在for 或 foreach透過
SQLParameter[i].ParameterName
SQLParameter[i].Value
就可以了

SQLParameter


本篇文章回覆於2017-08-03 15:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

bnn00023
檢舉此回應
下午突然靈光一閃,如果不知道數量的話就用陣列就好了,但是具體還沒想到,謝謝QZ_CHUNG 的解答。
本篇文章回覆於2017-08-03 15:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.