作者aeolus0829 (阿洽)
看板C_Sharp
标题sqlparameter 问题
时间Wed Jul 20 17:11:31 2016
HI
我正在练习用 sql parameter 去组装查询条件
前一个程式有成功,条件颇复杂,但这个看似简单的小程式一直没有成功
想破头找遍资料还是不行
还请高手帮忙解惑 .. @ @
部份程式码如下:
strSql = @"
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 ";
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());
//这样写一样不行
}
else cmd.CommandText = strSql;
DataTable dtResult = tp.getData(cmd);
getData()部份就这样而已
conn.Open();
dr = comm.ExecuteReader();
if (dr.HasRows) dt.Load(dr);
conn.Close();
return dt;
这段程式只要没有 cmd.Parameters 那一段就一定可以成功取回所有资料
相反,有 cmd.Parameters 那一段就一定不行 (不行指的是没有资料,空的)
我用这一段把 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 好像症状很像?
--
※ 发信站: 批踢踢实业坊(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
2F:→ lucky1lk: " WHERE NAME1 LIKE '%'"+"@prName"+"'%' " 这样? 07/20 20:37
3F:推 J002: like @prName, 然後addWithValue(@prName, "%"+str+"%") 07/20 20:55
4F:→ aeolus0829: 实测上述的方法都可以用~ 大感谢 07/21 08:45
5F:→ aeolus0829: 搞不懂 like 的部份为什麽要特殊处理... = =a 07/21 08:46