通过 ODBC 调用存储过程而不声明参数占位符

本文关键字:声明 参数 占位符 ODBC 调用 存储过程 通过 | 更新日期: 2023-09-27 17:56:44

我目前正在尝试通过ODBC来抽象存储过程的调用,方法是创建一个函数,该函数需要将过程名称作为字符串,并将一组键和值作为字典。正因为如此,我必须为ODBC Command建立一个字符串,即..是的,愚蠢。

CALL myProcedure(?, ?, ?, ?)

然后使用 ODBC 命令对象:

odbcCommand.Parameters.AddWithValue("key", "param");

现在要添加参数,我可以轻松地进行foreach.甚至是带有Select的 LINQ 样式。但我还必须创建带有问号的CALL字符串,我必须小心这样的事情永远不会发生:

CALL myProcedure(?, ?, ?, )

所以我必须遍历字典一次以添加参数,第二次循环将键和值连接到字符串 ( String.Join ),或者我使用 FOR 循环遍历所有内容,并且必须检查当前KeyValuePair是否是最后一个只是为了防止字符串末尾意外出现逗号。

有没有办法让我可以声明" CALL myProcedure"甚至类似的东西

odbcCommand.CommandType = CommandTypes.StoredProcedure;
odbcCommand.ProcedureName = "myProcedure";
[LOOP]
     - add Params damn comfortable
[/LOOP]

我希望有......这将帮助我减少由于无稽之谈而需要的额外步骤!

谢谢

通过 ODBC 调用存储过程而不声明参数占位符

添加参数后,使用以下命令:

int paramCount = odbcCommand.Parameters.Count();
string[] placeholders = Enumerable.Repeat("?", paramCount).ToArray();
string callParams = String.Join(", ", placeholders);

然后,您不再需要小心避免 CALL 字符串中引用的尾随逗号。(我意识到这并不能完全回答您消除占位符的问题。