[S2Container.NET] ADO.NETのパラメータマーカー
id:rmiya:20060707にも少し書きましたが、.NET Framework Data ProviderがサポートしているADO.NETのパラメータマーカーに一致する正規表現は、System.Data.Common.DbConnection.GetSchemaメソッドから取得することが可能です。
MSDNには、

たとえば、パラメータ名に "@" という前置文字が含まれている、名前付きパラメータがサポートされている場合、"(@[A-Za-z0-9_$#]*)" となります。

と記述されていたので実装もそうなっているのだろう、と思い込んでいたのですが違いました。

.NET Framework Data Providerが返す値は次のとおりです。

System.Data.SqlClient.SqlConnection

@[\p{Lo}\p{Lu}\p{Ll}\p{Lm}_@#][\p{Lo}\p{Lu}\p{Ll}\p{Lm}\p{Nd}\uff3f_@#\$]*(?=\s+|$)

System.Data.OleDb.OleDbConnection

\?

System.Data.Odbc.OdbcConnection

\?

System.Data.OracleClient.OracleConnection

:([\p{Lo}\p{Lu}\p{Ll}\p{Lm}__#$][\p{Lo}\p{Lu}\p{Ll}\p{Lm}\p{Nd}__#$]*)

Oracle.DataAccess.Client.OracleConnection

:([\p{Lo}\p{Lu}\p{Ll}\p{Lm}__#$][\p{Lo}\p{Lu}\p{Ll}\p{Lm}\p{Nd}__#$]*)


MSDNに書いているのはあくまで例なわけで、実装が違ってきてもおかしくありませんでした。

これを踏まえてS2ADOを修正したいと思います。
テストケースも足りていないので追加しておこう。