【问题标题】:C# how to call an as 400 stored procedure using oledbC#如何使用oledb调用as 400存储过程
【发布时间】:2019-08-20 07:58:40
【问题描述】:

您好,我正在尝试使用 OleDB 调用 as400 存储过程。您能否发布一个如何执行此操作的示例,因为我一直在学习一些教程,但无论我做什么,我总是会收到 Invalid Token Exception 这就是我的工作

        OleDbCommand sp = new OleDbCommand("CALL NASVARWG.SP001(?,?,?,?,?) ", connectionDB);
            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 = textBox_Reparto.Text;
            sp.Parameters["P3"].Size = 6;
            sp.Parameters["P3"].Direction = ParameterDirection.Input;

            sp.Parameters.Add("P4", System.Data.OleDb.OleDbType.Char).Value = "we can do this";
            sp.Parameters["P4"].Size = 60;
            sp.Parameters["P4"].Direction = ParameterDirection.Input;

            sp.Parameters.Add("P5", System.Data.OleDb.OleDbType.Char).Value = "help";
            sp.Parameters["P5"].Size = 256;
            sp.Parameters["P5"].Direction = ParameterDirection.Input;

            sp.Prepare();
            sp.ExecuteNonQuery();

我得到的异常是“NASVARWG”不是有效的令牌。为什么?这是包含该过程的库的名称,并且拼写正确。

感谢您的帮助

【问题讨论】:

  • 这是一个非常具体的问题,所以我没有 100% 确定的答案给你,但可能这不是你用来在 AS 400 中调用存储过程的完整命令。我在网上找到这个,有帮助吗:ibm.com/support/knowledgecenter/en/SSEPGG_9.8.0/…
  • AS400 是一种计算机,而不是数据存储。那么您尝试访问 DB2 的数据存储是什么?
  • @Liam 是的,我正在尝试访问 DB2
  • @Ale61268967 您在 Windows 工作站上安装了哪个 Db2 客户端名称,它的版本是多少?
  • @mao 我正在使用适用于 Windows 版本 5 的 Iseries Access

标签: c# stored-procedures db2 oledb db2-400


【解决方案1】:

带有 CommandType.StoredProcedure 示例的 C# 代码:

// assume a DB2Connection conn
DB2Transaction trans = conn.BeginTransaction();
DB2Command cmd = conn.CreateCommand();
String procName = "INOUT_PARAM";
cmd.Transaction = trans;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = procName;

带有 CommandType.Text 示例的 C# 代码:

// assume a DB2Connection conn
DB2Transaction trans = conn.BeginTransaction();
DB2Command cmd = conn.CreateCommand();
String procName = "INOUT_PARAM";
String procCall = "CALL INOUT_PARAM (@param1, @param2, @param3)";
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;
cmd.CommandText = procCall;

// Register input-output and output parameters for the DB2Command
cmd.Parameters.Add( new DB2Parameter("@param1", "Value1");
cmd.Parameters.Add( new DB2Parameter("@param2", "Value2");
DB2Parameter param3 = new DB2Parameter("@param3", IfxType.Integer);
param3.Direction = ParameterDirection.Output;
cmd.Parameters.Add( param3 );

// Call the stored procedure
Console.WriteLine("  Call stored procedure named " + procName);
cmd.ExecuteNonQuery();
    // Register input-output and output parameters for the DB2Command
    ...

    // Call the stored procedure
    Console.WriteLine("  Call stored procedure named " + procName);
    cmd.ExecuteNonQuery();

【讨论】:

  • 但是否可以使用 OleDB 实现相同的目标?此外,我在哪里可以找到 db2.dll ?!?
  • 我还没有找到 OleDB 的解决方案。 moreover where do I find the db2.dll ?!? 你可以把它放在你程序的最顶部using IBM.Data.DB2;
  • 我试过了,但无法识别 :-( 我错过了什么?!?
  • 什么无法识别?
  • IBM.Data.DB2 当我输入“使用 IBM.Data.DB2”时找不到它们
猜你喜欢
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 2018-12-07
  • 2021-12-29
相关资源
最近更新 更多