Oracle报错——无效字符

qingYun1029 2011-08-18 12:32:37

// strSql = string.Format(@"select news_id,news_title,cre_date,cate_id,upd_date from
// (select news_id,news_title,cre_date,cate_id,upd_date from vw_news where cate_id in ({0}) order by is_top desc,PUBLISH_DATE desc)
// where rownum <={1}", JoinArray(cate_type_id),rownum);

strSql = @"select news_id,news_title,cre_date,cate_id,upd_date from
(select news_id,news_title,cre_date,cate_id,upd_date from vw_news where cate_id in (:cate_type_ids) order by is_top desc,PUBLISH_DATE desc)
where rownum <=:rownumber";

OracleParameter[] prams = { new OracleParameter(":cate_type_ids", JoinArray(cate_type_id)),
new OracleParameter(":rownumber",rownum)};


上面两组sql语句,前面的格式化字符串方式拼接sql语句可以执行。。

但是参数化后就报错了,错误信息为“ORA-01722: 无效数字”。。

无语啊。。

帮帮忙!!
...全文
649 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingYun1029 2011-08-18
  • 打赏
  • 举报
回复
方法改了,但是惨不忍睹,肯定非常不好维护。哎!!!


List<OracleParameter> parList = new List<OracleParameter>();
if (cate_type_id.Length > 0)
{
strSql = @"select news_id,news_title,cre_date,cate_id,upd_date from
(select news_id,news_title,cre_date,cate_id,upd_date from vw_news where cate_id in (";
StringBuilder sbtemp = new StringBuilder();
for (int i = 0; i < cate_type_id.Length; i++)
{
sbtemp.Append(":cate_type_id" + i + ",");

}
string str = sbtemp.ToString().Substring(0, sbtemp.ToString().Length - 1);

strSql += str;

strSql += ") order by is_top desc,PUBLISH_DATE desc) where rownum <=:rownumber";


OracleParameter prs = null;
for (int i = 0; i < cate_type_id.Length; i++)
{
prs = new OracleParameter(":cate_type_id"+i,cate_type_id[i]);
parList.Add(prs);
}

prs = new OracleParameter(":rownumber", rownum);
parList.Add(prs);
}


老大给我提供的方法是将sql语句改成如下:

strSql = @"select news_id,news_title,cre_date,cate_id,upd_date from
(select news_id,news_title,cre_date,cate_id,upd_date from vw_news where cate_id in (:col1,:col2) order by is_top desc,PUBLISH_DATE desc)
where rownum <=:rownumber";


但是in的子语句都是不确定的,:col1,:col2这两个占位符从何而来呢???

你们觉得这样可以吗??
qingYun1029 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wxr0323 的回复:]

参考
[/Quote]

汗,一摸一样。。。

但是不熟悉oracle啊。。
qingYun1029 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wxr0323 的回复:]

是不是in的问题

||
[/Quote]

http://www.examda.com/oracle/zhonghe/20070228/115121250.html

应该是的,我查了一下。

但是oracle不熟悉。。
子夜__ 2011-08-18
  • 打赏
  • 举报
回复
子夜__ 2011-08-18
  • 打赏
  • 举报
回复
是不是in的问题

||
qingYun1029 2011-08-18
  • 打赏
  • 举报
回复
都不是,我试过了。。

这两个命名都没有问题。。

其他的sql语句用到了。。

关键是那个关键字“in”。。
LMAOhuaNL 2011-08-18
  • 打赏
  • 举报
回复
你将参数的命名改一下
LMAOhuaNL 2011-08-18
  • 打赏
  • 举报
回复
是不是换行的原因?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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