简体   繁体   English

C#如何使用oledb调用as 400存储过程

[英]C# how to call an as 400 stored procedure using oledb

Hi I am trying to call an as400 stored procedure using OleDB. 嗨,我正在尝试使用OleDB调用as400存储过程。 Could you please post an example of how to do it cause I've been following some tutorials but not matter what I do I always get an Invalid Token Exception this is what I do 您能否发布一个示例,因为我一直在关注一些教程,但是不管我做什么,我总是会收到一个无效的令牌异常,这就是我要做的

        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();

the exception I get says "NASVARWG" is not a valid token. 我得到的异常是“ NASVARWG”不是有效的令牌。 Why? 为什么? that is the name of the library containing the procedure and the spelling is correct. 这是包含该过程的库的名称,并且拼写正确。

Thanks for your help 谢谢你的帮助

AC# code with CommandType.StoredProcedure example : 带有CommandType.StoredProcedure示例的AC#代码:

// 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;

AC# code with CommandType.Text example : 带有CommandType.Text的AC#代码示例:

// 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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM