• 検索結果がありません。

ADO.NETのアーキテクチャ

N/A
N/A
Protected

Academic year: 2021

シェア "ADO.NETのアーキテクチャ"

Copied!
10
0
0

読み込み中.... (全文を見る)

全文

(1)

■ ADO.NET のアーキテクチャ ■ 従来のデータ処理は、主に接続をベースとした2 層モデルに基づいて居た。最近のデータ処理では、多 階層アーキテクチャが多用される様に成った為、プログラマは、非接続型アプローチへと切り替えて、 アプリケーションに、より優れたスケーラビリティを提供して居る。 ■ ADO.NET のコンポーネント ADO.NET には、データへのアクセスとデータの操作に使用出来るコンポーネントが 2 つ有る。 ・.NET Framework データプロバイダ .NET Framework データプロバイダは、データの操作と、データに対する高速、且つ、前方参照専用 読込専用のアクセスを実行する事を明確な目標と仕てデザインされたコンポーネントで有る。 Connection オブジェクトはデータソースとの接続機能を提供する。Command オブジェクトに依っ てデータベースコマンドにアクセス出来る為、データの返却、データの修正、格納されたプロシージ ャの実行、及び、パラメータ情報の送信やは取得を実行出来る。DataReader は、データソースから の高いパフォーマンスのデータストリームを提供する。最後に、DataAdapter は DataSet オブジェ クトとデータソース間のブリッジを提供する。DataAdapter は Command オブジェクトを使用して DataSet とデータの両方を読み込んだデータソースに SQL コマンドを実行し、DataSet 内で変更さ れたデータの内容をデータソースに戻す。 ・DataSet ADO.NET DataSet は、何のデータソースにも依存しないデータアクセスを明確な目的と仕てデザイ ンされて居る。従って、複数の異なるデータソースと併用したり、XML データと併用したり、アプ リケーションに取ってローカルなデータを管理する為に使用したり出来る。DataSet には、DataTable オブジェクト内のデータに関する主キー、外部キー、制約、及び、リレーション情報丈でなく、デー タの行と列で構成される複数のDataTable オブジェクトのコレクションが含まれる。

.NET Framework データプロバイダと DataSet のリレーションシップを次の図に示す。

デー

ータ

タベ

ベー

ース

(2)

■ DataReader 又は DataSet の選択 ア プリ ケーシ ョンで DataReader(「DataReader に依るデータの取得」を参照)又は DataSet (「ADO.NET での DataSet の使用」を参照)を使用する必要が有るか何うかを判断する場合は、アプ リケーションが必要とする機能の種類を考慮する必要が有る。以下を実行する場合はDataSet を使用す る。 ・アプリケーションでデータをローカルにキャッシュすると、其のデータを操作出来る。クエリの実行 結果を読み取る必要が有る場合は、DataReader の使用を推奨する。 ・層間で、又は、XML Web サービスからデータをリモート処理する場合 ・Windows フォームコントロールとの連結、又は、複数ソースに属するデータの組み合わせや関連付 け等、データと動的に対話する場合 ・データソースとの接続を開かずにデータに対する広範な処理を実行する場合(他のクライアントが使 用出来る様に、接続が解放される) DataSet に依って提供される機能が必要無い場合は、DataReader を使用して前方参照専用、読取専用 の方法でデータを返す事に依り、アプリケーションのパフォーマンスを向上させる事が出来る。 DataAdapter は DataReader を使用して DataSet(「DataAdapter からの DataSet の読み込み」を参 照)の内容を入力して居るが、DataReader を使用するとパフォーマンスを向上させる事が出来る。此 れは、DataSet の内容を作成、及び、入力する為に必要な処理が不要に成る丈でなく、DataSet が消費 するメモリが節約される為で有る。 ■ XML と ADO.NET ADO.NET は、XML の機能を活用して、データに対する非接続型アクセス機能を提供する。ADO.NET は、.NET Framework に属する XML クラスと密接に連携してデザインされて居る。此等は孰れも同じ アーキテクチャに属するコンポーネントで有る。

.NET Framework 内の ADO.NET 及び XML クラスは、DataSet オブジェクトの中に集められて居る。 DataSet に、XML のソース(ファイル、又は、XML ストリーム)に含まれるデータを入力出来る。 DataSet 内のデータソースとは関係無く、DataSet を XML スキーマ定義言語(XSD)スキーマを含め たW3C(World Wide Web Consortium)準拠の XML と仕て書く事が出来る。DataSet のネイティブ

のシリアル化形式はXML で有る事から、層間でデータを移動する優れた媒体と成る。DataSet は、XML

Web サービスとの間でデータとスキーマ コンテキストをリモート処理する場合に最適で有る。 ■ ADO.NET プラットフォームの要件

Microsoft .NET Framework SDK(ADO.NET を含む)は、MicrosoftR Windows XP、Microsoft Windows 2000、Microsoft Windows NT 4 with Service Pack 6a、Microsoft Windows Millennium Edition、 Microsoft Windows 98、Microsoft Windows CE の各プラットフォーム上でサポートされて居る。 ※ .NET Framework Data Provider for OLE DB 及び.NET Framework Data Provider for ODBC に

は、MDAC 2.6 以降のインストールが必要で有る。亦、MDAC 2.8 Service Pack 1(SP1)をインス トールする事を推奨する。MDAC 2.8 SP1 は、Data Access and Storage Developer Centerからダ ウンロードする事が出来る。

次のサンプルコードでは、アプリケーションに名前空間 System.Data をインクルードして ADO.NET

(3)

Visual Basic

Imports System.Data

C#

using System.Data;

ADO.NET クラスは、System.Data.dll に含まれて居り、System.Xml.dll に含まれる XML クラスと統 合される。名前空間 System.Data を使用したコードをコンパイルする場合は、System.Data.dll と System.Xml.dll の両方を参照する。ADO.NET アプリケーションの例に付いては、「ADO.NET の応用

例」を参照され度い。

層、及び、クライアント間のリモート処理、又は、マーシャリング

DataSet のデザインに依って、XML Web サービスを使用してクライアントにデータを Web 経由で簡単

に転送したり、.NET リモートサービスを使用して .NET コンポーネント間でデータをマーシャリング

したり出来る。亦、此の様に仕て、厳密に型指定されたDataSet をリモート処理出来る。XML Web サ

ービスの概要に付いては、「XML Web サービスの概要」を参照され度い。XML Web サービスから DataSet を使用する例に付いては、「XML Web サービスからの DataSet の使用」を参照され度い。 リモートサービスの概要に付いては、「.NET Framework リモート処理の概要」を参照され度い。 ADO.NET 2.0 では、DataTable オブジェクトは、リモート処理サービス、及び、XML Web サービス を併用する事が出来る。

(4)

■ ADO.NET の応用例 ■ データソースから結果を返し、コンソールやコマンドプロンプトに出力を書き込む単純なADO.NET の 応用例を以下に示す。 此の資料に有るサンプルは、下記のプロバイダを使用して、データソースへ接続し、データを取得する 方法を示して居る。必要で有れば、総てのデータプロバイダを単一のアプリケーション内で使用する事 も出来る。

.NET Framework Data Provider for SQL Server(System.Data.SqlClient) .NET Framework Data Provider for OLE DB(System.Data.OleDb) .NET Framework Data Provider for ODBC(System.Data.Odbc)

.NET Framework Data Provider for Oracle(System.Data.OracleClient)

次のSqlClient の例では、Microsoft SQL Server 7.0 以降のサンプルのデータベース Northwind と接続 し、SqlDataReaderを使用してCategories テーブルからレコードのリストを返す事が出来る物とする。 OleDb 及び Odbc の例では、サンプルデータベースの Microsoft Access Northwind との接続を前提と 仕て居る。OracleClient の例では、Oracle サーバー上の DEMO.CUSTOMER との接続を前提と仕て 居る。亦、System.Data.OracleClient.dll への参照を追加する必要が有る。 DataReader の詳細に付いては、「DataReader に依るデータの取得」を参照され度い。 ■ SqlClient Visual Basic Option Explicit On Option Strict On Imports System Imports System.Data Imports System.Data.SqlClient Public Class Program

Public Shared Sub Main( )

Dim connectionString As String = GetConnectionString( ) Dim queryString As String = _

"SELECT CategoryID, CategoryName FROM dbo.Categories;"

Using connection As New SqlConnection(connectionString)

Dim command As SqlCommand = connection.CreateCommand( ) command.CommandText = queryString

Try

connection.Open( )

Dim dataReader As SqlDataReader = command.ExecuteReader( ) Do While dataReader.Read( )

Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", dataReader(0), dataReader(1)) Loop dataReader.Close( ) Catch ex As Exception Console.WriteLine(ex.Message) End Try End Using End Sub

(5)

Private Shared Function GetConnectionString( ) As String ' To avoid storing the connection string in your code, ' you can retrieve it from a configuration file.

Return "Data Source=(local);Initial Catalog=Northwind;" & "Integrated Security=SSPI;" End Function End Class C# using System; using System.Data; using System.Data.SqlClient; class Program {

static void Main( ) {

string connectionString = GetConnectionString( ); string queryString =

"SELECT CategoryID, CategoryName FROM dbo.Categories;";

using (SqlConnection connection = new SqlConnection(connectionString)) {

SqlCommand command = connection.CreateCommand( ); command.CommandText = queryString;

try {

connection.Open( );

SqlDataReader reader = command.ExecuteReader( ); while (reader.Read( ))

{

Console.WriteLine("¥t{0}¥t{1}", reader[0], reader[1]); }

reader.Close( ); }

catch (Exception ex) { Console.WriteLine(ex.Message); } } }

static private string GetConnectionString( ) {

// To avoid storing the connection string in your code, // you can retrieve it from a configuration file.

return "Data Source=(local);Initial Catalog=Northwind; Integrated Security=SSPI"; } } ■ OleDb Visual Basic Option Explicit On Option Strict On Imports System Imports System.Data

(6)

Imports System.Data.OleDb Public Class Program

Public Shared Sub Main( )

Dim connectionString As String = GetConnectionString( )

Dim queryString As String = "SELECT CategoryID, CategoryName FROM Categories;"

Using connection As New OleDbConnection(connectionString)

Dim command As OleDbCommand = connection.CreateCommand( ) command.CommandText = queryString

Try

connection.Open( )

Dim dataReader As OleDbDataReader = command.ExecuteReader( ) Do While dataReader.Read( )

Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", dataReader(0), dataReader(1)) Loop dataReader.Close( ) Catch ex As Exception Console.WriteLine(ex.Message) End Try End Using End Sub

Private Shared Function GetConnectionString( ) As String ' To avoid storing the connection string in your code, ' you can retrieve it from a configuration file.

' Assumes Northwind.mdb is located in c:¥Data folder. Return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & "c:¥Data¥Northwind.mdb;User Id=admin;Password=;" End Function End Class C# using System; using System.Data; using System.Data.OleDb; class Program {

static void Main( ) {

string connectionString = GetConnectionString( );

string queryString = "SELECT CategoryID, CategoryName FROM Categories;"; using (OleDbConnection connection = new OleDbConnection(connectionString)) {

OleDbCommand command = connection.CreateCommand( ); command.CommandText = queryString;

try {

connection.Open( );

OleDbDataReader reader = command.ExecuteReader( ); while (reader.Read( ))

{

Console.WriteLine("¥t{0}¥t{1}", reader[0], reader[1]); }

(7)

reader.Close( ); }

catch (Exception ex) { Console.WriteLine(ex.Message); } } }

static private string GetConnectionString( ) {

// To avoid storing the connection string in your code, // you can retrieve it from a configuration file.

// Assumes Northwind.mdb is located in the c:¥Data folder. return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "c:¥¥Data¥¥Northwind.mdb;User Id=admin;Password=;"; } } ■ Odbc Visual Basic Option Explicit On Option Strict On Imports System Imports System.Data Imports System.Data.Odbc Public Class Program

Public Shared Sub Main( )

Dim connectionString As String = GetConnectionString( )

Dim queryString As String = "SELECT CategoryID, CategoryName FROM Categories;"

Using connection As New OdbcConnection(connectionString)

Dim command As OdbcCommand = connection.CreateCommand( ) command.CommandText = queryString

Try

connection.Open( )

Dim dataReader As OdbcDataReader = command.ExecuteReader( ) Do While dataReader.Read( )

Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", dataReader(0), dataReader(1)) Loop dataReader.Close( ) Catch ex As Exception Console.WriteLine(ex.Message) End Try End Using End Sub

Private Shared Function GetConnectionString( ) As String ' To avoid storing the connection string in your code, ' you can retrieve it from a configuration file.

(8)

Return "Driver={Microsoft Access Driver (*.mdb)};" _ & "Dbq=c:¥Data¥Northwind.mdb;Uid=Admin;Pwd=;" End Function End Class C# using System; using System.Data; using System.Data.Odbc; class Program {

static void Main( ) {

string connectionString = GetConnectionString( );

string queryString = "SELECT CategoryID, CategoryName FROM Categories;"; using (OdbcConnection connection = new OdbcConnection(connectionString)) {

OdbcCommand command = connection.CreateCommand( ); command.CommandText = queryString;

try {

connection.Open( );

OdbcDataReader reader = command.ExecuteReader( ); while (reader.Read( ))

{

Console.WriteLine("¥t{0}¥t{1}", reader[0], reader[1]); }

reader.Close( ); }

catch (Exception ex) { Console.WriteLine(ex.Message); } } }

static private string GetConnectionString( ) {

// To avoid storing the connection string in your code, // you can retrieve it from a configuration file.

// Assumes Northwind.mdb is located in the c:¥Data folder. return "Driver={Microsoft Access Driver (*.mdb)};"

+ "Dbq=c:¥¥Data¥¥Northwind.mdb;Uid=Admin;Pwd=;"; } } ■ OracleClient Visual Basic Option Explicit On Option Strict On Imports System Imports System.Data Imports System.Data.OracleClient

(9)

Public Class Program

Public Shared Sub Main( )

Dim connectionString As String = GetConnectionString( )

Dim queryString As String = "SELECT CUSTOMER_ID, NAME FROM DEMO.CUSTOMER"

Using connection As New OracleConnection(connectionString)

Dim command As OracleCommand = connection.CreateCommand( ) command.CommandText = queryString

Try

connection.Open( )

Dim dataReader As OracleDataReader = command.ExecuteReader( ) Do While dataReader.Read( )

Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", dataReader(0), dataReader(1)) Loop dataReader.Close( ) Catch ex As Exception Console.WriteLine(ex.Message) End Try End Using End Sub

Private Shared Function GetConnectionString( ) As String ' To avoid storing the connection string in your code, ' you can retrieve it from a configuration file.

Return "Data Source=ThisOracleServer;Integrated Security=yes;" End Function End Class C# using System; using System.Data; using System.Data.OracleClient; class Program {

static void Main( ) {

string connectionString = GetConnectionString( );

string queryString = "SELECT CUSTOMER_ID, NAME FROM DEMO.CUSTOMER"; using (OracleConnection connection = new OracleConnection(connectionString)) {

OracleCommand command = connection.CreateCommand( ); command.CommandText = queryString;

try {

connection.Open( );

OracleDataReader reader = command.ExecuteReader( ); while (reader.Read( ))

{

Console.WriteLine("¥t{0}¥t{1}", reader[0], reader[1]); }

reader.Close( ); }

(10)

{ Console.WriteLine(ex.Message); } } }

static private string GetConnectionString( ) {

// To avoid storing the connection string in your code, // you can retrieve it from a configuration file.

// Assumes Northwind.mdb is located in the c:¥Data folder.

return "Data Source=ThisOracleServer;Integrated Security=yes;"; }

参照

関連したドキュメント

(A)エクストラバージンオリーブ油:これは、特に加工前のオリーブの取扱い又は加工中及び

評価点 1 0.8 0.5 0.2 0 ―.. 取組状況の程度の選択又は記入に係る判断基準 根拠 調書 その5、6、7 基本情報

100~90 点又は S 評価の場合の GP は 4.0 89~85 点又は A+評価の場合の GP は 3.5 84~80 点又は A 評価の場合の GP は 3.0 79~75 点又は B+評価の場合の GP は 2.5

data-set-name BOOLEAN 参照 DataSet true(レポート内に収容). data-reference BOOLEAN データ項目情報

この届出者欄には、住所及び氏名を記載の上、押印又は署名のいずれかを選択す

特に(1)又は(3)の要件で応募する研究代表者は、応募時に必ず e-Rad に「博士の学位取得

他方、額縁その他これに類する物品で、木製又は金属製の枠に取り付けたものは、44.14 項又 は

100~90点又はS 評価の場合の GP は4.0 89~85点又はA+評価の場合の GP は3.5 84~80点又はA 評価の場合の GP は3.0 79~75点又はB+評価の場合の GP は2.5