您如何使用OLEDB调用AS400存储程序



我正在尝试使用OLEDB从我的代码中调用一个存储过程,但我不知道该执行此操作。这是我编写的代码,但它不起作用

OleDbCommand sp = connectionDB.CreateCommand();
sp.CommandText = "CALL NASVARWG.§SP001('?','?','?','?','?','?')";
sp.CommandType = CommandType.StoredProcedure;
sp.Parameters.Add("P1", System.Data.OleDb.OleDbType.Char).Value = "ESANASTRIS";
sp.Parameters["P1"].Size = 10;
sp.Parameters["P1"].Direction = ParameterDirection.Input;
sp.Parameters.Add("P2", System.Data.OleDb.OleDbType.Char).Value = "SAMNAS";
sp.Parameters["P2"].Size = 10;
sp.Parameters["P2"].Direction = ParameterDirection.Input;
sp.Parameters.Add("P3", System.Data.OleDb.OleDbType.Char).Value = "blah";
sp.Parameters["P3"].Size = 10;
sp.Parameters["P3"].Direction = ParameterDirection.Input;
sp.Parameters.Add("P4", System.Data.OleDb.OleDbType.Char);
sp.Parameters["P4"].Size = 2;
sp.Parameters["P4"].Direction = ParameterDirection.Output;
sp.Parameters.Add("P5", System.Data.OleDb.OleDbType.Char);
sp.Parameters["P5"].Size = 256;
sp.Parameters["P5"].Direction = ParameterDirection.Output;
sp.Parameters.Add("P6", System.Data.OleDb.OleDbType.Char).Value = textBox_Reparto.Text;
sp.Parameters["P6"].Size = 6;
sp.Parameters["P6"].Direction = ParameterDirection.Input;
sp.Parameters.Add("P7", System.Data.OleDb.OleDbType.Char).Value = "we can do this";
sp.Parameters["P7"].Size = 60;
sp.Parameters["P7"].Direction = ParameterDirection.Input;
sp.Parameters.Add("P8", System.Data.OleDb.OleDbType.Char).Value = "help";
sp.Parameters["P8"].Size = 256;
sp.Parameters["P8"].Direction = ParameterDirection.Input;
sp.Prepare();
sp.ExecuteNonQuery();

我在" sp.prepare((;"中得到例外。告诉我命令的语法是错误的。

如果可以的话,请使用IBM I访问ado.net驱动程序,然后将程序调用放置在存储过程中。他们可以将数据从i到PC转换。

as @syafiqur__提到了ado.net驱动程序是一个更好的选择。

一如既往地有一本IBM Redbook。在我的解决方案中,我使用IBMDA400版本。

对于您的情况,应该看起来像这样:

var command = new iDB2Command(cmdText: "§SP001", cmdType: CommandType.StoredProcedure, connection: masterSystemConnection);
var p1 = new iDB2Parameter(parameterName: "@P1", type: iDB2DbType.iDB2Char, size: 10);
    p1.Direction = ParameterDirection.Input;
    p1.Value = "ESANASTRIS";
    command.Parameters.Add(p1);
// ... all your other parameters, no call to Prepare
command.ExecuteNonQuery();

关于您的SQL0469:

在声明过程,创建过程或更改过程语句上更改参数的属性,或更改参数。

有关其他详细信息,请查看IBM文档。

Bernd

我认为您的问题很可能是您在SQL语句中的 no 参数标记。

sp.CommandText = "CALL NASVARWG.§SP001('?','?','?','?','?','?')";

'?'是字符串常数,而不是参数标记?,它应该在没有撇号的情况下出现。因此,该语句应该看起来像这样:

sp.CommandText = "CALL NASVARWG.§SP001(?, ?, ?, ?, ?, ?)";

相关内容

  • 没有找到相关文章

最新更新