绑定变量选项

时间:2012-02-21 16:05:44

标签: sql-server oracle oledb postgis bind-variables

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

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

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

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

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

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