简体   繁体   English

使用VARRAY参数的C#调用Oracle 11g过程

[英]C# call to Oracle 11g Procedure with VARRAY parameter

How from ASP.NET I can call a stored procedure in an Oracle package that accepts a VArray. 如何从ASP.NET中调用可以接受VArray的Oracle程序包中的存储过程。 The VArray will pass a list of keys that the stored procedure will use to modify appropriate records. VArray将传递键列表,存储过程将使用该键来修改适当的记录。 I know I could send the keys in separate calls or send a delimited list, but I'd rather use an array. 我知道我可以在单独的调用中发送密钥,也可以发送定界列表,但是我宁愿使用数组。

Assuming you're using ODP.NET (you shouldn't be using System.Data.OracleClient anyway), here's how to do it: 假设您使用的是ODP.NET(无论如何都不应该使用System.Data.OracleClient ),这是这样做的方法:

using System;
using System.Data;
using Oracle.DataAccess.Client;

class SomeClass
{
    void SomeMethod(string connectionString, int[] anArrayOfKeys)
    {
        using (var con = new OracleConnection(connectionString))
        using (var cmd = con.CreateCommand())
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "StoredProcedureNameGoesHere";
            cmd.Parameters.Add(
                "ParameterNameGoesHere",
                OracleDbType.Array,
                anArrayOfKeys,
                ParameterDirection.Input);

            con.Open();
            cmd.ExecuteNonQuery();
        }
    }
}

Did you try this 你尝试过这个吗

OracleCommand cmd = OracleConnection1.CreateCommand();
cmd.CommandText = "INSERT INTO ArrayTable VALUES (:CODE, :TITLE, : ARR1, :ARR2)";
...
OracleArray arr1 = new OracleArray("SCOTT.TARRAY1", OracleConnection1);
arr1.Add(10);
arr1.Add(20);
arr1.Add(30);
...
cmd.Parameters["ARR1"].DbType = OracleDbType.Array;
cmd.Parameters["ARR1"].Value = arr1;
...
cmd.ExecuteNonQuery();

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

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