如何使用.net为DB2的sql语句定义终止字符

本文关键字:语句 定义 终止 字符 sql 何使用 net DB2 | 更新日期: 2023-09-27 18:00:02

我正在字符串中执行以下

 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;
        }
    }

我调用的脚本中有多个语句以;'结尾s,并且在文件的末尾包含一个@符号。在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@

如何使用.net为DB2的sql语句定义终止字符

我不确定如何定义分隔符。但是,您可以尝试在C#中将整个文本拆分为单独的语句,然后逐个执行一个语句。这对你有用吗?

这是一个老问题,但我也遇到了类似的问题,下面是解决方案:

--#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

它会很好用的。