Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Oledb命令构建查询以查询AS400数据库_C#_Ado.net_Oledb_Ibm Midrange_Db2 400 - Fatal编程技术网

C# 使用Oledb命令构建查询以查询AS400数据库

C# 使用Oledb命令构建查询以查询AS400数据库,c#,ado.net,oledb,ibm-midrange,db2-400,C#,Ado.net,Oledb,Ibm Midrange,Db2 400,我正在尝试使用参数化查询查询AS400数据库。这是我的密码: string connectionString = ConfigurationManager.ConnectionStrings["****"].ConnectionString; using (OleDbConnection con = new OleDbConnection(connectionString)) using (OleDbCommand command = con.CreateCommand())

我正在尝试使用参数化查询查询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命名时,对象名称的限定形式为authorization-name.object-name

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

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

--如果要使用SQL命名约定,请验证相应SQL命令中的SQL命名选项,并在authorization-id.object-name格式中限定对象名称

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

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


您缺少参数。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));

为什么说“不工作”是什么意思?将连接字符串存储在.Config文件中,然后使用(OleDbCommand=con.CreateCommand())将此行更改为使用(OleDbCommand=new OleDbCommand(sqlStr,con))还可以在
案例中查找语法,如果语法相同,例如在Sql中,则应
以IsBatch结尾Server@abatishchev添加了例外