如何使用 .net 为 DB2 的 sql 语句定义终止字符
Posted
技术标签:
【中文标题】如何使用 .net 为 DB2 的 sql 语句定义终止字符【英文标题】:How to define terminating character for sql statement for DB2 using .net 【发布时间】:2011-09-21 08:14:39 【问题描述】:我正在尝试执行以下操作
public void ExecuteNonQuery(string script)
try
int returnCode;
var builder = new DB2ConnectionStringBuilder
UserID = Context.Parameters["USERID"],
Password =Context.Parameters["PASSWORD"],
Database = Context.Parameters["DATABASE"],
CurrentSchema = Context.Parameters["CURRENTSCHEMA"]
;
using (var connection = new DB2Connection(builder.ConnectionString))
using (var command = new DB2Command(script, connection)
)
command.CommandType = CommandType.Text;
connection.Open();
returnCode = command.ExecuteNonQuery();
File.WriteAllText(Context.Parameters["LOGFILE"], "Return Code -1 Successful : " + returnCode);
catch (Exception ex)
Trace.WriteLine(ex.StackTrace);
throw ex;
我正在调用一个脚本,它有多个以 ; 结尾的语句,并且在文件的末尾它包含一个 @ 符号。在 db2 命令行上,我可以使用 db2 -td@ -f 。我想知道如何将 @ 符号定义为语句终止符,以便我可以从 csharp 执行脚本。 这是示例 sql 文件:
DROP PROCEDURE fred@
CREATE PROCEDURE fred ( IN name, IN id )
specific fred
language sql
b1: begin
update thetable
set thename = name
where table_id = id;
end: b1
@
grant execute on procedure inst.fred to user dbuser@
【问题讨论】:
【参考方案1】:我不确定我们如何定义分隔符。但是,您可以尝试将整个文本拆分为 C# 中的单独语句,然后一个接一个地执行一个语句。这对你有用吗?
【讨论】:
【参考方案2】:这是一个老问题,但我有类似的问题,这里是解决方案:
--#SET TERMINATOR @
create or replace procedure test
begin
declare line varchar(100);
set line = 'hello db2 world!';
call dmbs_output.put_line(line);
end@
然后只是:
$ db2 -f script.sql
它会正常工作的。
【讨论】:
以上是关于如何使用 .net 为 DB2 的 sql 语句定义终止字符的主要内容,如果未能解决你的问题,请参考以下文章
如何重写oracle SQL语句以符合ansi-98并转换为DB2格式