如何使用 .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格式

如何使用错误消息中指定的 tbspaceid tableid 在 DB2 中查找表和列

在db2中,如何使用sql查询最新七天的数据

DB2若何将数据导出为insert语句?

如何将 DB2 触发器转换为 SQL Server?

在 SQL 语句中,如何选择所有非特定条件的元素?