当前位置: 首页 > 面试题库 >

iDB2 Select命令的参数返回SQL0418

督弘化
2023-03-14
问题内容

我正在开发一个使用IBM.Data.DB2.iSeries.dll连接到DB2 iSeries 7.1数据库的.NET应用程序。

我需要执行一个带有n个参数的SELECT命令,这些参数在查询中定义为@paramX,之后再设置参数值,但是当我运行代码时,我得到一个SQL048 Use of parameter marker notvalid.。我到处都在搜索文档/示例,但是我阅读的所有内容都与我使用的代码一致。我想念什么吗?如果这无效,最好的替代方法是什么?

这是我用来测试的隔离代码。

    static void Main(string[] args)
    {
        String myConnectionString = "DataSource=*******;Database=*******;UserId=*******;Password=*******;";
        iDB2Connection myConnection = new iDB2Connection();
        try{
            myConnection.ConnectionString = myConnectionString;
            myConnection.Open();

            var cmd = new iDB2Command("SELECT TIMESTAMP(DATE(@param0),TIME(@param1)) FROM SYSIBM.SYSDUMMY1", myConnection);

            cmd.Parameters.Add(new iDB2Parameter("@param0", iDB2DbType.iDB2Char));
            cmd.Parameters["@param0"].Value = "1900-01-01";

            cmd.Parameters.Add(new iDB2Parameter("@param1", iDB2DbType.iDB2Char));
            cmd.Parameters["@param1"].Value = "00.00.00";

            using (var reader = cmd.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    reader.Read();
                    StringBuilder sb = new StringBuilder();

                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        sb.AppendLine(reader[i].ToString().Trim());
                    }

                    Console.Out.WriteLine(sb.ToString());
                }
            }
        }catch(Exception e)
        {
                Console.Out.WriteLine(e.ToString());
        }finally{
            if (myConnection != null)
            {
                myConnection.Close();
            }
        }
        Console.Read();
    }

在一个不相关的答案中,我发现问题可能是DB2不知道参数的基础类型(这很奇怪,因为我要强类型化该参数),因此,一种可能的解决方案是在查询所需的参数类型,例如:

SELECT TIMESTAMP(DATE(cast(@param0 as char(10))),TIME(cast(@param1 as char(10)))) FROM SYSIBM.SYSDUMMY1

这实际上是可行的,但是没有更好的方法来解决这个问题吗?


问题答案:

AFAIK,这是一个平台限制。可以通过平台添加到应用程序异常的解释来确认。话虽这么说,因为我无法更改收到的参数,也无法访问将要保存在查询中的信息,因此针对我的特定问题的最佳解决方案是对

TIMESTAMP 的类型进行 CAST 标量函数用途,例如: ***

SELECT TIMESTAMP(cast(@param0 as DATE),cast(@param1 as TIME)) FROMSYSIBM.SYSDUMMY1



 类似资料:
  • 问题内容: 目前,我正在使用String操作,在进行演示时,我发现了一些不同的行为。 下面是我的代码。 } 而上面的代码就是。我正在运行传递命令行参数的代码。 str1 == str2 :: true str1 == str3 :: false strArray [0] == strArray [1] :: true str1 == strArray [1] :: true strArray1 [

  • 本文向大家介绍Windows Powershell 命令返回数组,包括了Windows Powershell 命令返回数组的使用技巧和注意事项,需要的朋友参考一下 当我们把一个命令的执行结果保存到一个变量中,可能会认为变量存放的是纯文本。 但是,事实上Powershell会把文本按每一行作为元素存为数组。如果一个命令的返回值不止一个结果时,Powershell也会自动把结果存储为数组。 使用数组存

  • 问题内容: 我正在使用docker并使用以下命令: 指向我的应用程序文件按角度编译的文件夹。 我首先转到文件夹,然后从那里运行命令。一切正常,我能够通过port:进入应用程序,但是在docker更新之后,我运行错误: docker:无效的参考格式。请参阅’docker run –help’。 我一直在搜索并检查以下发布的docker:无效的参考格式,但这似乎与我的问题不同。这是基于命令的信息 :

  • 出于某种奇怪的原因..返回,而linux中的命令返回 星期日;星期一;星期二;星期三;星期四;星期五;星期六 任何帮助都将不胜感激,谢谢。

  • 这是我得到的问题“编写一个程序来读取和显示2个命令行参数和命令行参数数组的长度”。 这是我用Java给出的答案。。这是正确的吗?

  • 为了方便起见,我们支持在运行 Blade 应用的时候修改一些配置,比如我在运行时指定端口: java -jar blade-app.jar --server.port=9088 当然还支持一些其他的命令行参数,看看下面的表格: 命令行参数 描述 示例 server.address 服务地址,默认是本机 0.0.0.0 回环地址 --server.address=192.168.1.100 serv