1

是否可以在 SQL Server 中使用与 Oracle 相同的表示法来表示绑定变量,即:0、:1 而不是使用?。

我已经搜索过,但没有找到任何关于此的结论。目前,我的解决方案使用绑定变量将值引入我在数据库上运行的语句中,这在 Oracle 中运行良好,但我还需要在 SQL Server 和 PostGIS 中执行相同的操作,仅举几例。我不想说例如:

switch(dialect)
{
    case "Oracle":
    {
        oleDataBaseConnection.AddParameter(":1", coordsys);
        break;
    }

    case "SQLServer":
    { 
        oleDataBaseConnection.AddParameter("?", coordsys);
        break;
    }
}

*AddParameter() 是我的包装类中的一个函数,它在调用我编写的执行函数时将值添加到要添加到命令对象的列表中。

我希望我的代码尽可能干净,并且不包含如上所示的硬编码内容。我想要一个适合所有人的解决方案。(是的,我知道这可能是一厢情愿!)

我知道我可以使用字符串替换来做到这一点,但这不是我所追求的。我真的不想使用这样的解决方法。我的项目经理还要求我尝试使用绑定变量找到解决方案。

有任何想法吗?

4

1 回答 1

1

简短的回答是否定的,绑定变量在不同数据库中的实现方式不同。所以你需要在某个地方使用混乱的兼容性逻辑。

也就是说,我个人过去曾使用字符串替换为绑定参数输入正确的语法来解决此问题。因此,您可以嵌入:coordsys到您的 SQL 语句中,然后嵌入到您oleDataBaseConnection.AddParameter("coordsys", coordsys);的代码中。然后,您的 prepare 语句将搜索 SQL,查找:coordsys并用您需要的任何内容(例如?)替换它,并按名称构建参数列表以供以后执行。当您去执行时,您可以即时建立正确的绑定参数列表以供使用。

实现幕后位有点棘手,但我个人发现它会带来干净的 SQL,并具有绑定参数的好处(如数据库性能、SQL 注入攻击的安全性)。

于 2012-02-21T16:37:20.973 回答