以string.Format处理参数和正则表达式

时间:2018-07-18 11:21:09

标签: c# oracle

我正在使用通过string.Format (query, id, batch)提供参数的查询,也正在使用REGEXP_LIKE(A.NI,'^\d{13}$')将选择限制为只能在NI列中找到的13位数字,这是因为花括号适合字符串中的参数.Format(),我的正则表达式{13} 在这里也被视为参数,并获得

的异常
  

索引(从零开始)必须大于或等于零且小于   参数列表的大小。

如何处理此问题; 我的查询看起来像这样;

SELECT B.ID,
       B.NI,
       B.NT,
       {1},
       B.MB, 
       SYSDATE 
  FROM (SELECT A.* 
          FROM core_table A 
         WHERE A.batch_id = {0} AND 
               (REGEXP_LIKE(A.NI,'^\d{13}$') OR 
                REGEXP_LIKE(A.NT,'^\d{7}$') OR 
                REGEXP_LIKE(A.MB,'^\d{11}$'))) B 
 WHERE B.BAT_ID = {0} AND 
       B.IS_DELETED = 0;

1 个答案:

答案 0 :(得分:1)

您使用string.Format来填充值{0}和{1}。

这将引发异常,因为您的字符串包含{13},{7},{11},并且.NET认为它们是占位符,例如{0},{1}。

您应该用双{{}}来固定字符串。查看有效的代码:

https://dotnetfiddle.net/TG8Wa7

string query = @"SELECT B.ID,B.NI,B.NT,{1},B.MB, SYSDATE FROM (SELECT A.*from core_table A where A.batch_id={0} AND (REGEXP_LIKE(A.NI,'^\d{{13}}$') OR REGEXP_LIKE(A.NT,'^\d{{7}}$') OR REGEXP_LIKE(A.MB,'^\d{{11}}$'))) B where B.BAT_ID={0} AND B.IS_DELETED=0;";
string.Format(query, "1","2");