[英]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.