簡體   English   中英

以string.Format處理參數和正則表達式

[英]handling parameters and regex in string.Format

我在通過string.Format (query, id, batch)提供參數時使用string.Format (query, id, batch)也在使用REGEXP_LIKE(A.NI,'^\\d{13}$')將選擇限制為只能在NI列中找到13位數字,由於花括號適合string.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;

您使用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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM