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/cn.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/cn.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灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP