C# 使用Oledb命令构建查询以查询AS400数据库
我正在尝试使用参数化查询查询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())
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添加了例外