带参数的SQL语句删除不成功,用到了关键字in,但是在.net中也没有报异常?

frustrate2 2009-04-22 02:47:44
语句如下:
public void DeleteSubjectByKm_id(string str_IDS)
{
SqlParameter patrameter = new SqlParameter("@km_ids", SqlDbType.VarChar,50);
patrameter.Value = str_IDS;
using (SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectString"]))
{
try
{
conn.Open();
string str_sql = @"delete from edm_t_dm_subject where cast(km_id as varchar(50)) in (@km_ids) ";
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = str_sql;
cmd.Parameters.Add(patrameter);
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
}
}
}
...全文
214 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
南哥1207 2009-04-22
  • 打赏
  • 举报
回复
string str_sql = "delete from edm_t_dm_subject where cast(km_id as varchar(50)) in ("+km_ids+) ";
其中,km_ids="'a','b','c'";
vrhero 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 frustrate2 的回复:]
declare @km_ids varchar(50)
set @km_ids = '6525,6535,6529'
select * from edm_t_dm_subject where cast(km_id as varchar(50)) in (@km_ids)
是空的?
这是怎么回事,我对这个技术点不太清楚,为什么不行?
[/Quote]
declare @km_ids varchar(50)
set @km_ids = '6525,6535,6529'
exec "select * from edm_t_dm_subject where cast(km_id as varchar(50)) in ("+@km_ids+")"

要这样才行...语法问题...
过河石头 2009-04-22
  • 打赏
  • 举报
回复
select * from edm_t_dm_subject where km_id in (1,2,3)

select * from edm_t_dm_subject where km_id in (@km_ids)
@km_ids这个参数如何表示 1,2,3 ? 传 '1,2,3'进去明显是错误的

select * from edm_t_dm_subject where km_id in (@km_ids1,@km_ids2,@km_ids3)
@km_ids1 传1
@km_ids2 传2
@km_ids3 传3
正确

楼主想要实现功能,还需另寻它法。




烈火蜓蜻 2009-04-22
  • 打赏
  • 举报
回复
如果没有抛异常,应该是你的SQL语句有问题
蓝海D鱼 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 frustrate2 的回复:]
declare @km_ids varchar(50)
set @km_ids = '6525,6535,6529'
select * from edm_t_dm_subject where cast(km_id as varchar(50)) in (@km_ids)
是空的?
这是怎么回事,我对这个技术点不太清楚,为什么不行?
[/Quote]

set @km_ids = ‘'6525','6535',6529'’ 要用这种方式 隔起来的 你看看帮助 in的用法
Tensionli 2009-04-22
  • 打赏
  • 举报
回复
debug,将SQL字符串拿出来到查询分析器中试试.
mengsijun1987 2009-04-22
  • 打赏
  • 举报
回复
ericzhangbo1982111 2009-04-22
  • 打赏
  • 举报
回复
select * from edm_t_dm_subject where cast(km_id as varchar(50)) in (@km_ids)


为什么要转换成字符串啊。。。。

select * from edm_t_dm_subject where km_id in (@km_ids)


frustrate2 2009-04-22
  • 打赏
  • 举报
回复
declare @km_ids varchar(50)
set @km_ids = '6525,6535,6529'
select * from edm_t_dm_subject where cast(km_id as varchar(50)) in (@km_ids)
是空的?
这是怎么回事,我对这个技术点不太清楚,为什么不行?
frustrate2 2009-04-22
  • 打赏
  • 举报
回复
是英文逗号分隔的,可能vrhero的说法是对的,我试下
zzxap 2009-04-22
  • 打赏
  • 举报
回复
你要保证in里面的参数是用英文逗号分隔
desegou 2009-04-22
  • 打赏
  • 举报
回复
patrameter.Value = “‘” +str_IDS +“’”;
xiaoyuzi 2009-04-22
  • 打赏
  • 举报
回复
试试看select * from edm_t_dm_subject where cast(km_id as varchar(50)) in (@km_ids)
估计你这个条件查出来是空的
vrhero 2009-04-22
  • 打赏
  • 举报
回复
SqlParameter patrameter = new SqlParameter("@km_ids", SqlDbType.VarChar,50);
where cast(km_id as varchar(50)) in (@km_ids)
---------
这种写法是错误的...这里不能用参数传...要么拼字符串要么用一个SP接收此参数再用exec执行...
frustrate2 2009-04-22
  • 打赏
  • 举报
回复
用了,没有报错。用不带参数的SQl语句就没有问题。
好像用带参数的话,in里面的参数识别不了。
frustrate2 2009-04-22
  • 打赏
  • 举报
回复
写了,也没有异常,郁闷,还提示删除成功,为什么in里面的参数识别不了?
深山老柳 2009-04-22
  • 打赏
  • 举报
回复
你看一下@km_ids中是否有null值,如有,会不起作用的.
建议用JOIN及子查询来做
bw555 2009-04-22
  • 打赏
  • 举报
回复
你用了try,当然没异常了,
catch (Exception ex)
{
msgbox(ex.message)
}
先看看有没有报错

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧