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

时间:2010-01-14 03:15:46

标签: c# stored-procedures oracle11g package varray

如何从ASP.NET中我可以在接受VArray的Oracle包中调用存储过程。 VArray将传递一个密钥列表,存储过程将使用这些密钥来修改适当的记录。我知道我可以在单独的调用中发送密钥或发送分隔列表,但我宁愿使用数组。

2 个答案:

答案 0 :(得分:2)

假设你正在使用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();
        }
    }
}

答案 1 :(得分:-1)

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