正试图使用参数化查询来查询AS400数据库。这是我的代码:使用Oledb命令构建查询以查询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形式限定对象名称。对象的名字。
- 如果要使用系统命名约定,请在相应的SQL命令中指定系统命名选项,并以schema-name/object-name格式限定对象名称。
- 使用系统命名约定,确保可以在当前路径中找到为SQL例程中的参数和变量指定的用户定义类型。
你是什么意思,为什么说做“不工作”? – abatishchev
将连接字符串存储在.Config文件中,然后使用(OleDbCommand命令=新的OleDbCommand(sqlStr,con))将该连接字符串更改为 '使用(OleDbCommand command = con.CreateCommand())'到 ''也查找您的'CASE WHEN'的语法,如果语法相同(例如在Sql Server中),您应该将'END作为IsBatch' – MethodMan
@abatishchev添加了异常 – PRK