【问题标题】:Building query with Oledb command to query AS400 database使用 Oledb 命令构建查询以查询 AS400 数据库
【发布时间】:2017-03-08 22:34:32
【问题描述】:

我正在尝试使用参数化查询来查询 AS400 数据库。这是我的代码:

string connectionString = ConfigurationManager.ConnectionStrings["****"].ConnectionString;
using (OleDbConnection con = new OleDbConnection(connectionString))
using (OleDbCommand command = con.CreateCommand())
{
    string sqlStr = @"SELECT CASE IsBatch WHEN 'Y' THEN 1 ELSE 0 END
                      FROM Batch200 
                      WHERE BatchID=LEFT(?,4) AND BatchNumber=CAST(RIGHT(?,9)AS INT)";

    command.CommandType = CommandType.Text;
    command.CommandText = str;
    command.Parameters.Add(new OleDbParameter("@p1", polNumber));

    var option = command.ExecuteScalar();
}

我尝试了这两个查询,但它们都不起作用。如何解决这个问题?

收到此错误消息:

SQL5016:限定对象名 **** 无效。

原因。 . . . . : 发生以下情况之一:

-- 用于限定对象名称的语法对于指定的命名选项无效。对于系统命名,对象名的限定形式是模式名/对象名。使用 SQL 命名,对象名称的限定形式是授权名称.对象名称。

-- 用于限定对象名称的语法是不允许的。用户定义的类型不能使用 SQL 过程或函数的参数和 SQL 变量的系统命名约定中的模式来限定。

恢复。 . . :执行以下操作之一,然后重试请求:

-- 如果要使用 SQL 命名约定,请验证相应 SQL 命令中的 SQL 命名选项,并以授权 ID.对象名称的形式限定对象名称。

-- 如果要使用系统命名约定,请在相应的 SQL 命令中指定系统命名选项,并以 schema-name/object-name 的形式限定对象名称。

-- 使用系统命名约定,确保SQL例程中为参数和变量指定的用户定义类型可以在当前路径中找到。

【问题讨论】:

  • 为什么说“不工作”是什么意思?
  • 将连接字符串存储在 .Config 文件中,然后将这一行 using (OleDbCommand command = con.CreateCommand()) 更改为 using(OleDbCommand command = new OleDbCommand(sqlStr, con)) 还要查找 CASE WHEN 的语法,如果语法相同,则应该 END as IsBatch Sql Server 中的示例
  • @abatishchev 添加了异常

标签: c# ado.net oledb ibm-midrange db2-400


【解决方案1】:

您缺少参数。 SqlStr 需要两个。

我认为它应该是这样的

string sqlStr = @"SELECT CASE IsBatch WHEN 'Y' THEN 1 ELSE 0 END
                  FROM Batch200 
                  WHERE BatchID=LEFT(@BATCHID,4) AND BatchNumber=CAST(RIGHT(@BATCHNUMBER,9)AS INT)";

然后您将添加两个参数

command.Parameters.Add(new OleDbParameter("@BATCHID", batchID));
command.Parameters.Add(new OleDbParameter("@BATCHNUMBER", batchNumber));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多