sql >> データベース >  >> RDS >> Oracle

.Netのパラメータを使用してOracleストアドプロシージャを呼び出すための適切なodbcコマンドは何ですか?

    .NET3.5とOracle10gR2を実行しています。コメントに応じて出力パラメータを追加しました。

    ServerUid 、およびPwd 罪のない人を保護するために変更されました。それらを適切な値に設定します。

    私のストアドプロシージャ:

    create or replace
    procedure test_proc(p1 in number, p2 in out varchar2) is
    begin
      p2 := to_char(p1 + to_number(p2));
    end;
    

    私のテストコード:

    using System;
    using System.Data;
    using System.Data.Odbc;
    
    class OdbcTest
    {
        const string connectionString =
            @"Driver={Microsoft ODBC for Oracle};" +
            @"Server=MyTnsName;" +
            @"Uid=MySchema;" +
            @"Pwd=MyPassword;";
    
        public static string TryMe()
        {
            using (var odbcConn = new OdbcConnection(connectionString))
            using (var odbcCommand = odbcConn.CreateCommand())
            {
                odbcCommand.CommandText = "{ CALL test_proc(?, ?) }";
                odbcCommand.CommandType = CommandType.StoredProcedure;
    
                odbcCommand.Parameters.Add("p1", OdbcType.Decimal).Value = 42;
                var p2 = odbcCommand.Parameters.Add("p2", OdbcType.VarChar, 30);
                p2.Direction = ParameterDirection.InputOutput;
                p2.Value = "25";
    
                odbcConn.Open();
                odbcCommand.ExecuteNonQuery();
    
                return p2.Value as string; // returns 67
            }
        }
    }
    

    OUTを使用する場合 またはIN OUT パラメータ、Size OdbcParameterのプロパティ 適切な値に設定する必要があります。

    例外処理に関するコメントに応えて、データアクセスメソッドの呼び出し元に例外を処理してもらいます。 using コンストラクト、Dispose メソッドは、例外があるかどうかに関係なく、コマンドオブジェクトと接続オブジェクトで自動的に呼び出されます。




    1. Doctrineクエリ言語はグループごとの最大/最新行を取得します

    2. Symfony2 doctrinemysqlINクエリ

    3. 既存のテーブルの ANSI_NULLS オプションを更新する

    4. データベースに接続できません:ユーザー''@'localhost'のデータベース'socialdb'へのアクセスが拒否されました