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行読んでは貼り付けで読むことができました。