C# 将SqlCommand中的参数指示器从'@';至';:';

C# 将SqlCommand中的参数指示器从'@';至';:';,c#,sqlcommand,sqlparameter,C#,Sqlcommand,Sqlparameter,我正在开发一个库,它允许我为3种db类型创建连接、命令、读卡器等:oracle、postgresql和sql server。我需要将参数传递到查询中,但postgres和oracle似乎支持将:符号作为参数指示符,但sqlserver需要@符号。我想知道是否有办法将此指示器更改为:,或者注册新的指示器 我曾考虑创建自己的解析器,但问题是:在postgresql中,我可以执行简单的强制转换,如“Description”::text,因此我的解析器在这个表达式上会失败。另一方面,我可以得到@登录查询

我正在开发一个库,它允许我为3种db类型创建连接、命令、读卡器等:oracle、postgresql和sql server。我需要将参数传递到查询中,但postgres和oracle似乎支持将
符号作为参数指示符,但sqlserver需要
@
符号。我想知道是否有办法将此指示器更改为
,或者注册新的指示器

我曾考虑创建自己的解析器,但问题是:在postgresql中,我可以执行简单的强制转换,如
“Description”::text
,因此我的解析器在这个表达式上会失败。另一方面,我可以得到
@
登录查询f.e.
“Description”我喜欢“%@%”
,不知道如何解决这个问题


这是否可能实现?

T-SQL需要
@
;无论如何,这是无法改变的。但是,.NET
SqlParameter
允许您指定参数名称,而不使用
@
(传输时它将在参数名称前面加上前缀)。如果您需要解析查询文本,那么无论发生什么情况,您都会遇到困难:即使是T-SQL也允许类似于
[:columnName]
[@columnName]
,允许通过转义“特殊”字符。解析器不仅需要知道参数是如何使用的,而且还需要知道每种方言的转义规则,如果您希望获得完全支持的话。“最正确的”是独立于查询文本指定参数(及其类型),然后您可以自由选择任何表示参数的方式。这不仅避免了试图从查询文本中解析参数时出现的任何问题(并且不会将它们与转义符或变量名混淆),而且还可以防止出现问题。