【发布时间】:2014-11-24 04:50:16
【问题描述】:
我正在为 Enterprise Architect 编写插件,我需要操作内部脚本。 我想将自己的函数添加到现有脚本中。
脚本存储在脚本列中的t_script表中。
不幸的是,脚本没有在 API 中公开,所以我必须解决这个问题并使用数据库上的更新查询来更新脚本。
问题是脚本倾向于使用大量字符,在 sql 更新查询中使用它们时可能会造成问题,但我不太热衷于编写自己的转义函数。
所以我尝试的是这个
public void addCode(string functionCode)
{
this._code += functionCode;
SqlCommand sqlCommand = new SqlCommand("update t_script set script = @functionCode where ScriptID = " + this.scriptID );
sqlCommand.Parameters.AddWithValue("@functionCode",this._code);
this.model.executeSQL(sqlCommand.CommandText);
}
我希望 sqlCommand.CommandText 能给我将要执行的实际 sql 字符串,但它没有。它基本上仍然是我创建它时使用的相同字符串,并且没有替换“@functionCode”。
另一个困难是我的 SQL 字符串需要适用于 EA 支持的所有 DBMS 类型
- SQL Server 2000、2005、2008 和 2012
- MySQL
- Oracle 9i、10g、11g 和 12c
- PostgreSQL
- MSDE
- Sybase Adaptive Server Anywhere
- MS 访问
- OpenEdge 进展
- 火鸟
有没有人有比自己编写转义函数更好的解决方案?
【问题讨论】:
-
期待预期的 ;-) 当然,您可以要求 Sparxians 提供他们的内部程序。可能与要求教皇犯错误一样。所以在此期间做你所期望的:写你自己的东西>:-(
-
我认为唯一真正安全和理智的方法是在 Select 中使用绑定变量。你不需要转义。 - 您只需将变量保存在某处...
-
@Falco 你是什么意思?问题是我需要一个完整的 SQL 字符串来传递给 Repository 对象。我无法控制字符串的实际执行。
标签: c# sql sql-server oracle enterprise-architect