C_Sharp 板


LINE

吃掉... : if (!string.IsNullOrEmpty(txtVendor.Text)) : { : //cmd.CommandText = strSql + "WHERE NAME1 LIKE N'%"+ : txtVendor.Text.Trim() + "%'"; // 這樣寫可以 : : cmd.CommandText = strSql + "WHERE NAME1 LIKE '%@prName%'"; : : cmd.Parameters.Add("@prName", SqlDbType.VarChar).Value = : txtVendor.Text.Trim(); // 這樣寫不行 : cmd.Parameters.AddWithValue("@prName", txtVendor.Text.Trim()); : //這樣寫一樣不行 : : } 問題在於SqlCommand看到你把%@prName%寫在單引號裡面 所以認定他是個字串而不是SQL變數 如果今天你要使用變數,正確的寫法是 "'%' + @prName + '%'" 這樣SQL執行時,會將@prName帶入SqlParameter的值 出現的字串才會等同於"'%" + txtVendor.Text.Trim() + "%'" 吃掉... : 我用這一段把 cmd 組裝的 sql : foreach (SqlParameter p in cmd.Parameters) : { : cmd.CommandText = cmd.CommandText.Replace(p.ParameterName, : p.Value.ToString()); : } : Response.Write(cmd.CommandText); : : 還原如下 : : SELECT CAST(LIFNR AS INT) as 供應商編號, NAME1 as 名稱, ORT01 as 城市, PSTLZ : as 郵遞區號, STRAS as 地址, TELF1 as 聯絡人, TELFX as 電話, ADR6.SMTP_ADDR as : eMail from prd.LFA1 left join prd.ADR6 on LFA1.ADRNR = ADR6.ADDRNUMBER WHERE : NAME1 LIKE N'%泉%' : : 在 sql server management studio 中確定語法是對的... 但是搞不懂為什麼在 c# : 組裝時就出問題 @ @ : : : 爬文本版 #1Mswq2pb 好像症狀很像? : 你弄錯SqlCommand它針對CommandText裡的字串處理方式了 Oracle的我不確定 但Sql Server這邊的Parameter,它不是使用replace CommandText的@字眼 它的實際原理其實是SQL的變數宣告 Sql Server它的變數就是@開頭 除了一些可能的跳脫外,它不會去對CommandText的@字眼做異動 只是最後再依Parameter內容輸出SQL變數宣告的字串 用C#的語法來比喻你的作法就類似原本你應該寫成 String prName = txtVendor.Text.Trim(); String sql = "SELECT * FROM 資料表 WHERE 欄位 = '" + prName + "'"; 結果你寫成 String sql = "SELECT * FROM 資料表 WHERE 欄位 = 'prName'"; 然後你把SQL給print出來不是寫Response.Write(sql); 而是寫成Response.Write(sql.replace("prName", prName)); 所以結果覺得SQL是正確的 : -- :



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.20.129.1
: ※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1469005893.A.44E.html : ※ 編輯: aeolus0829 (211.20.129.1), 07/20/2016 17:14:32 : 推 CrazyAngel: http://goo.gl/QkvCO8 07/20 20:23 : → lucky1lk: " WHERE NAME1 LIKE '%'"+"@prName"+"'%' " 這樣? 07/20 20:37 : 推 J002: like @prName, 然後addWithValue(@prName, "%"+str+"%") 07/20 20:55 : → aeolus0829: 實測上述的方法都可以用~ 大感謝 07/21 08:45 : → aeolus0829: 搞不懂 like 的部份為什麼要特殊處理... = =a 07/21 08:46 結論:不是LIKE要特別處理,而是你把SQL字串和SQL變數弄混了 -- 人有病,自知否? 知而不治,知之何用? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.35.46.112
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1469129071.A.C0B.html ※ 編輯: CloudyWing (114.35.46.112), 07/22/2016 03:52:14
1F:推 aeolus0829: 喔喔 原來如此 知道原因安心多了 謝謝 07/22 08:18
2F:→ lucky1lk: 備註: oracle: " like '%' || :input || '%' "; 即可 07/22 09:28
3F:→ aeolus0829: 先記下來了. 難保不會遇到 oracle, 謝謝! 07/22 13:38







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP