Oracleの設定
C#でOracleに接続します。今回は .net frameworkではなく新しい .netの方です。なのでDataSetは使いません。
Oracleの無料版をインストール
Oracleのダウンロードページに行きます
今回は無料版をダウンロードします
サイズは1.9Gbyteあります。しばらく掛かります。コーヒーでもどうぞ
それを解凍します。
解凍したらそのフォルダーの中の「setup.exe」を起動して、インストールしてください
途中、sysとsystemのパスワードを聞かれるので自分で考えて入力して記憶してください
今回入れたExpress versionは、無料で使えます。またコンテナという入れ物があり、自分で作成することもできるのですが、最初から出来合いのコンテナが「XEPDB1」という名前でできていますので、これを使います。
最初にsqlplusというCUIのツールがあるので、これで初期設定していきます。コマンドプロンプトで特権付きでsqlplusを起動します
C:\Users\f1225>sqlplus sys/password as sysdba SQL*Plus: Release 21.0.0.0.0 - Production on 火 4月 23 09:35:10 2024 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 に接続されました。 SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> alter session set container=XEPDB1; セッションが変更されました。 SQL> show con_name CON_NAME ------------------------------ XEPDB1 SQL>
con_nameというのがコンテナー名でデフォルトのCDB$ROOTからXEPDB1に切り替えることができます。プラガブルデータベースというらしい
続いてコンテナーの中にテーブルスペースを確保します。
create tablespace mydb datafile 'c:\app\f1225\product\21c\oradata\xe\xepdb1\mydb.dbf' size 100M autoextend on next 500K maxsize 1024m;
c:\appはoracleをインストールしたときにできています。その中のXEPDB1用の中にテーブルスペースを確保しました。
create user あなたのユーザー名 identified by "あなたのパスワード" default tablespace mydb temporary tablespace temp profile default; grant DBA to あなたのユーザー名;
ユーザーを作ったので一度入りなおしてみます
SQL> exit Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0との接続が切断されました。 C:\Users\f1225>sqlplus あなたのユーザー名/あなたのパスワード@localhst:1521/XEPDB1 Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 に接続されました。 SQL> show con_name CON_NAME ------------------------------ XEPDB1 SQL> create table Shohin (shohin_id char(4) not null, shohin_mei varchar(100) not null, shohin_bunrui varchar(32) not null, hanbai_tanka integer, shiire_tanka integer, torokubi date, primary key (shohin_id)); insert into shohin values ('0001','Tシャツ','衣服',1000,500,'2009-09-20'); insert into shohin values ('0002','穴あけパンチ','事務用品',500,320,'2009-09-11'); insert into shohin values ('0003','カッターシャツ','衣服',4000,2800,null); insert into shohin values ('0004','包丁','キッチン用品',3000,2800,'2009-09-20'); insert into shohin values ('0005','圧力鍋','キッチン用品',6800,5000,'2009-01-15'); insert into shohin values ('0006','フォーク','キッチン用品',500,null,'2009-09-20'); insert into shohin values ('0007','おろしがね','キッチン用品',880,790,'2008-04-28'); insert into shohin values ('0008','ボールペン','事務用品',100,null,'2009-11-11');
コンテナーもあってます。テーブルを作ります。
select * from shohin; ...... SHOHIN_I -------- SHOHIN_MEI -------------------------------------------------------------------------------- SHOHIN_BUNRUI HANBAI_TANKA ---------------------------------------------------------------- ------------ SHIIRE_TANKA TOROKUBI ------------ -------- 0008 ボールペン 事務用品 100 09-11-11 8行が選択されました。
なんじゃこっりゃーーー
設定した文字の長さ分でてくるので、読みづらい。そこで調整します
SQL> set linesize 300 SQL> column shohin_bunrui format a20 SQL> column shohin_mei format a20 SQL> select * from shohin; SHOHIN_I SHOHIN_MEI SHOHIN_BUNRUI HANBAI_TANKA SHIIRE_TANKA TOROKUBI -------- -------------------- -------------------- ------------ ------------ -------- 0001 Tシャツ 衣服 1000 500 09-09-20 0002 穴あけパンチ 事務用品 500 320 09-09-11 0003 カッターシャツ 衣服 4000 2800 0004 包丁 キッチン用品 3000 2800 09-09-20 0005 圧力鍋 キッチン用品 6800 5000 09-01-15 0006 フォーク キッチン用品 500 09-09-20 0007 おろしがね キッチン用品 880 790 08-04-28 0008 ボールペン 事務用品 100 09-11-11 8行が選択されました。 SQL>
ようやくデータが入りました。
select table_name,owner from dba_tables where owner='大文字のユーザー名';
ちなみに、テーブルはdba_tables表に入っているので、大文字のユーザー名で絞って出せばテーブル一覧が出ます
c#のプロジェクトを作ります
新規にC#のプロジェクト作成
Visual Studioを立ち上げて、新しいプロジェクトを作成していきます。
新規プロジェクトを作成します。
.NETのformアプリケーションを選択します。似たものがいっぱいあるので間違わないようにしてください。.net frameworkではない方です。
プロジェクトの名前を設定します。csCoreOracletest1としました。
ではFormを作っていきましょう。FormにはListViewとボタンを貼り付けます
さて、Oracleに接続するにはライブラリーを追加しないといけません。
Visual Studioでは、必要なイブラリーはNuGetから取得するようになっています。
最初取得済みのリストがでるので参照に切り替えて「Oracle」を検索して、Oracle.ManagedDataAccess.Coreを選択
プロジェクトにチェックを入れて「インストール」します。実は最初Oracle.ManagedDataAccessを使ったのですが、インストールできて実行もできたのですが、インストール時にエラーがでていたので、変えました
これでOracleへの接続が使えるようになるので、コーディングしていきます
using Oracle.ManagedDataAccess.Client; namespace csCoreOracleTest1 { public partial class Form1 : Form { public String sql = "Select shohin_id,shohin_mei,shohin_bunrui," + "hanbai_tanka, case when shiire_tanka is null then 0 else shiire_tanka end, " + "case when torokubi is null then to_date('1970-01-01','YYYY-MM-DD') else torokubi end " + "from shohin"; public String ConnectionString = "Data Source=" + "(DESCRIPTION=" + "(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))" + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XEPDB1))); " + "User Id=eternal; Password=kagosima"; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void btnRead_Click(object sender, EventArgs e) { listView1.Items.Clear(); listView1.View = View.Details; listView1.Columns.Add("id"); listView1.Columns.Add("商品名"); listView1.Columns.Add("分類"); listView1.Columns.Add("単価"); listView1.Columns.Add("仕入"); listView1.Columns.Add("登録日"); listView1.Columns[0].Width = 100; listView1.Columns[1].Width = 150; listView1.Columns[2].Width = 100; listView1.Columns[3].Width = 100; listView1.Columns[4].Width = 100; listView1.Columns[5].Width = 100; try { using (OracleConnection conn = new OracleConnection(ConnectionString)) { conn.Open(); using (OracleCommand cmd = new OracleCommand(sql, conn)) { using (OracleDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { ListViewItem item = new ListViewItem(); item.Text = reader.GetString(0).ToString(); item.SubItems.Add(reader.GetString(1).ToString()); item.SubItems.Add(reader.GetString(2).ToString()); item.SubItems.Add(reader.GetInt32(3).ToString()); item.SubItems.Add(reader.GetInt32(4).ToString()); item.SubItems.Add(reader.GetDateTime(5).Date.ToString("yyyy/MM/dd")); listView1.Items.Add(item); } } } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }
Oracleは1521ポートへの接続です。コンテナーをXEPDB1にしています。今回はListViewでやりましたので、各列の設定をして、reader.Read()で1行読んでは貼り付けで読むことができました。