2013-01-17 90 views
1

我正在實現我自己的DBCommand,就像我們專有數據庫的包裝一樣,通過它我們只能通過API和字符串訪問。 Boooo從字符串中提取SQL參數名稱

我希望能夠通過正則表達式找到我的正常參數,而不是選擇@@ IDENTITY字段(或其他類似的東西)。然後我會與參數NULL'Some Value'等的實際值替換參數名稱

目前我有

@\w{1,} 

給出一個字符串

INSERT INTO MYTABLE(VALUE1, VALUE2) VALUES (@MyValue1, @MyValue2); SELECT @@IDENTITY 

我匹配我也試過[^@]@\w{1,}但它匹配(@MyValue1[email protected](下劃線表示空格)

如何不匹配@@標識?

回答

3

您可以添加paretheses,標誌着你真正要使用其匹配的字符串的子表達式:[^@](@\w{1,}),然後用Match.Groups(1)只提取一部分。

另一個變體是負面的後視斷言:(?<[email protected])@\w{1,},在字符串的一開始就有一個匹配@name的附加獎金(好吧,它可能不會發生)。

更新:它不會幫助你'@quoted @string @literals',這是合法的SQL,但不參數