C#&Oracle-マージナルノート-1

画像



昔々、とても昔...


同社はOracleデータベースのライセンスを購入しました。 それから私はこの会社に就職しました。 したがって、.Netを「大衆に」宣伝し始めました。 Oracleデータベースは多くの組織では使用されていませんが、使用されています。

C#を使用してOracleデータベースとやり取りする方法は?







私は事前に予約します。私はオラクルの第一人者ではありません。 また、パターンの美しい使い方の第一人者ではありませんが、私は試してみて、パイがどこにあるのかを知っています私は哲学的に質問に近づき、それが何であるか、私は欲しいものを知っていますが、私はそれを必要な方法で使用します。



しかし、哲学を残しましょう。 タスクを引き受けましょう。

まず最初に、「水曜日」を準備する必要があります。

1. Oracleクライアントをインストールします。これがないと、データベースとの対話を実行できません。

2.ニーズに合わせてTNSをカスタマイズします。

3. Visual Studioでプロジェクトを作成します。

4. System.Data.OracleClient.dllアセンブリへの参照を追加します。これを使用して、データベースを「操作」します。



私たちは地面を準備し、おそらく軍事委員会データベースを作成します。 最も単純な場合、これには1つのテーブルで十分です。

create table CONSCRIPT_INFO (

ID NUMBER not null ,

FIRST_NAME VARCHAR2(128),

LAST_NAME VARCHAR2(128),

AGES NUMBER,

GROWTH FLOAT ,

BIOGRAPHY CLOB ,

constraint PK_CONSCRIPT_INFO primary key (ID)

);










識別子、名、姓、年齢、身長、伝記。 体重は興味がありません。



私の意見では、最も興味深いものを追加するための手順を定義し、それから理由を説明します。

PROCEDURE ADD_CONSCRIPT

(FirstNameIn IN VARCHAR2, LastNameIn IN VARCHAR2,

AgesIn IN NUMBER, GrowthIn IN FLOAT , BiographyIn IN CLOB )

IS

BEGIN

INSERT INTO CONSCRIPT_INFO

(

ID,

FIRST_NAME,

LAST_NAME,

AGES,

GROWTH,

BIOGRAPHY

)

VALUES

(

CONSCRIPT_INFO_SEQ.NEXTVAL,

FirstNameIn,

LastNameIn,

AgesIn,

GrowthIn,

BiographyIn

);

END ;








取り外し:



PROCEDURE DELETE_CONSCRIPT

(ConscriptIDIn IN NUMBER)

IS

BEGIN



DELETE

FROM CONSCRIPT_INFO

WHERE ID = ConscriptIDIn;



END ;








データの受信:



PROCEDURE GET_CONSCRIPTS

(ConscriptsOut OUT sys_refcursor)

IS

BEGIN



OPEN ConscriptsOut FOR

SELECT *

FROM CONSCRIPT_INFO;



END ;








次に、新しいユーザー(CLOB型のオブジェクト)を追加する手順で興味深いことを説明します。 このタイプは、最大4000バイトの文字列を処理できるVarcharとは異なり、最大4ギガバイトのサイズの文字列データを格納できます。 つまり サイズが5000のVARCHARフィールドを作成しようとすると、深刻な「バマー」が発生します。 しかし、C#のCLOB型を使用した人は、これが非常に「チェリャビンスク」であることを知っています。 しかし、私は注文について自分より先に進みます。



Oracleを使用する場合、接続を明示的に閉じないと、SELECT`aが指数関数的に増加した後にカーソルの数が増えます。 この問題は「正面から」解決されます。



接続を作成して開く




using (OracleConnection connection = new OracleConnection())

{

...

}








これにより、IDisposableがすべての大まかな作業を行います。

OracleConnectionコンストラクターに注目すると、「空」とデータベースへの接続を説明する文字列を使用する2つのオプションがあることがわかります。

行は次のようになります。

データソース= out_database_name;パスワード= our_password;ユーザーID = our_username

説明は、ここでは、この行は不要だと思います。



次のステップは、接続を開くことです。

connection.Open();







チームビルディング




これで、チームを実行する準備が整いました。 コマンドを使用した後、それを「解放」する必要もあります。原則から逸脱せず、同じ素晴らしい使用構文を使用します。



using (OracleConnection connection = new OracleConnection())

{

using (OracleCommand command = new OracleCommand())

{

command.Connection = connection;

command.CommandType = System.Data.CommandType.StoredProcedure;

command.CommandText = "GET_CONSCRIPTS" ;

}

}








この「断片」のコードが何をするのかを考えてみましょう。最初にチームが作成され、接続が割り当てられ、その中でチームが作業します。 次に、コマンドのタイプが示され、合計3つのタイプが強調表示されます。

1. StoredProcedure-ストアドプロシージャの名前。

2. TableDirect-テーブルの名前。

3.テキスト-SQLテキストコマンド。 (デフォルト)。



次のパラメーターはテキストで、直接ストアドプロシージャまたはコマンドの名前です。 この場合、 「GET_CONSCRIPTS」というストアドプロシージャが使用されます。



さあ、先に進みましょう

渡されたパラメーターを使用する




すぐに予約します。CommandType.Textでパラメーターを使用することもできます。これを行う方法を以下に示します。



それまでの間、オプションに戻ります。



OracleParameter ConscriptsOut = new OracleParameter()

{

ParameterName = "ConscriptsOut" ,

Direction = System.Data.ParameterDirection.Output,

OracleType = OracleType.Cursor

};



command.Parameters.Add(ConscriptsOut);








ここで何が起こっているのか:パラメーターを作成し、「exit」で動作することを示し、パラメーターのタイプを示しました(使用されているタイプと標準の.Netタイプとの互換性に関する詳細情報はMSDNで見つけることができます)。 パラメーターが「入力」で機能する場合、 値-Valueを指定する必要があります。 パラメータをチームに添付して...



コマンド実行




command.ExecuteNonQuery();







コマンドは完了しました...これで、たとえば次のようにデータを「レーキ」できます。



DataTable table = new DataTable();

table.Load(command.Parameters[ "ConscriptsOut" ].Value as OracleDataReader);








返されるパラメータは、OracleDataReaderのように読み取ることができるカーソルです。 パラメータの分解方法は「宿題」のままです;)。



道路上




結論として、パラメーターをテキストに渡す方法について説明したいのですが、次のように表示します。



using (OracleConnection connection = new OracleConnection())

{

using (OracleCommand command = new OracleCommand())

{

command.Connection = connection;

command.CommandType = System.Data.CommandType.Text;

command.CommandText = @"SELECT *

FROM CONSCRIPT_INFO

WHERE AGES < :max_ages;"
;



OracleParameter maxAges = new OracleParameter()

{

ParameterName = "max_ages" ,

Direction = ParameterDirection.Input,

OracleType = OracleType.Number,

Value = 27

};



command.Parameters.Add(maxAges);



OracleDataReader reader = command.ExecuteReader();



...

}

}








ご覧のとおり、トリックは- 記号を使用することです。



次の記事では、CLOBの操作について説明し、自分に合ったコードを提供します。



All Articles