データアダプタ詳細

Size: px
Start display at page:

Download "データアダプタ詳細"

Transcription

1 データベース DataAdapter クラス DataAdapter クラスの概要 DataSet へのデータの格納やデータソースの更新に使用される一連の SQL コマンドとデータベース接続を表す DataAdapter は DataSet とデータソースとの間でデータの取得と保存を行う為の ブリッジの役割を果たす DataAdapter は 此のブリッジを提供する為に DataSet 内のデータをデータソース内のデータと一致する様に変更する Fill と データソース内のデータを DataSet 内のデータと一致する様に変更する Update で 割り当てを行う SQL Server データベースに接続する場合は 関連付けられた SqlCommand オブジェクトや SqlConnection オブジェクトと共に SqlDataAdapter を使用する事に依り 全体的なパフォーマンスを向上させる事が出来る OLE DB をサポートするデータソースに接続する場合は 関連付けられた OleDbCommand オブジェクトや OleDbConnection オブジェクトと共に DataAdapter を使用する ODBC をサポートするデータソースに接続する場合は 関連付けられた OdbcCommand オブジェクトや OdbcConnection オブジェクトと共に DataAdapter を使用する Oracle データベースに接続する場合は 関連付けられた OracleCommand オブジェクトや OracleConnection オブジェクトと共に DataAdapter を使用する DataAdapter のインスタンスを作成すると 読み書き可能プロパティが初期値に設定される 此等の初期値の一覧に付いては DataAdapter コンストラクタの記述を参照され度い コンストラクタ DataAdapter クラスの新しいインスタンスを初期化する オーバーロードの一覧.NET Compact Framework に依ってサポートされて居る DataAdapter ( ) 名前 DataAdapter (DataAdapter) 説明 DataAdapter クラスの新しいインスタンスを初期化する 既存の同じ型のオブジェクトから DataAdapter クラスの新しいインスタンスを初期化する パブリックプロパティ 名前 AcceptChangesDuringFill AcceptChangesDuringUpdate Container 説明 Fill 操作中に DataTable に DataRow が追加された後で 其の行に対して AcceptChanges を呼び出すか何うかを示す値を取得 設定する Update で AcceptChanges が呼び出されるか何うかを取得 設定する Component を格納して居る IContainer を取得する -1-

2 ContinueUpdateOnError FillLoadOption MissingMappingAction MissingSchemaAction ReturnProviderSpecificTypes Site TableMappings 行の更新中にエラーが発生した時に 例外を生成するか何うかを指定する値を取得 設定する アダプタが DbDataReader から DataTable にデータを読み込む方法を決定する LoadOption を取得 設定する 一致するテーブルや列が受信データに含まれて居ない場合に実行するアクションを決定する 既存の DataSet スキーマが受信データと一致しない時に実行するアクションを決定する Fill メソッドがプロバイダ固有の値 又は 共通の CLS 準拠の値の孰れを返すかを取得 設定する Component の ISite を取得 設定する ソーステーブルと DataTable との間のマスターマップを提供するコレクションを取得する パブリックメソッド 名前 説明 CreateObjRef リモートオブジェクトとの通信に使用するプロキシの生成に必要 な情報を総て格納して居るオブジェクトを作成する Dispose DataAdapter に依って使用されて居るリソースを解放する Equals 2 つの Object インスタンスが等しいか何うかを判断する Fill DataSet 名を使用して データソース内の行と一致する様に DataSet 内の行を追加 更新する 亦 DataTable を作成する FillSchema DataTable を指定した DataSet に追加する GetFillParameters SQL SELECT ステートメントの実行時にユーザーが設定したパラ メータを取得する GetHashCode 特定の型のハッシュ関数と仕て機能する GetHashCode は ハッ シュアルゴリズムや ハッシュテーブルの様なデータ構造での使用 に適して居る GetLifetimeService 対象のインスタンスの有効期間ポリシーを制御する現在の有効期 間サービスオブジェクトを取得する GetType 現在のインスタンスの Type を取得する InitializeLifetimeService 対象のインスタンスの有効期間ポリシーを制御する有効期間サー ビスオブジェクトを取得する ReferenceEquals 指定した複数の Object インスタンスが同一か何うかを判断する ResetFillLoadOption FillLoadOption を既定の状態にリセットし Fill で AcceptChangesDuringFill を受け入れる様にする ShouldSerializeAcceptChangesDuringFill AcceptChangesDuringFill プロパティを永続化する必要が有るか 何うかを決定する ShouldSerializeFillLoadOption FillLoadOption プロパティを永続化する必要が有るか何うかを決 定する ToString Component の名前を格納して居る String を返す ( 存在する場合 ) 此のメソッドはオーバーライド出来ない Update 指定された DataSet 内の "Table" と謂う名前の DataTable に含ま れる挿入行 更新行 又は 削除行に対して INSERT UPDATE 又は DELETE ステートメントを個別に呼び出す -2-

3 プロテクトメソッド 名前 CloneInternals CreateTableMappings Dispose Fill FillSchema Finalize GetService HasTableMappings MemberwiseClone OnFillError ShouldSerializeTableMappings 説明此の DataAdapter のインスタンスのコピーを作成する 新しい DataTableMappingCollection を作成する DataAdapter に依って使用されて居るリソースを解放する DataSet 名を使用して データソース内の行と一致する様に DataSet 内の行を追加 更新する 亦 DataTable を作成する DataTable を指定した DataSet に追加する Component がガベージコレクションに依ってクリアされる前に アンマネージリソースを解放し 其の他のクリーンアップ操作を実行する Component や其の Container で提供されるサービスを表すオブジェクトを返す DataTableMappingCollection が作成されて居るか何うかを示す Fill 中にエラーが発生した時に呼び出される 1 つ以上の DataTableMapping オブジェクトが存在し 其等を永続化する必要が有るか何うかを確認する パブリックイベント 名前 Disposed FillError 説明 コンポーネントの Disposed イベントを待機するイベントハンドラを追加する 格納操作中にエラーが発生した時に返される -3-

4 DataAdapter クラスの利用 此のセクションの内容 DataAdapter からの DataSet の読み込み (4 頁 ) DataAdapter を使用して DataSet にテーブル 列 及び 行を設定する方法に付いて説明する DataAdapter に依るパラメータの使用 (13 頁 ) DataAdapter のコマンドプロパティのパラメータを使用する方法と DataSet の列の内容をコマンドパラメータに割り当てる方法に付いて説明する パラメータと戻り値の指定 (19 頁 ) DataAdapter 及び DataSet を使用した 入力 出力 及び ストアドプロシージャの戻り値の使い方に付いて説明する DataAdapter イベントの使用 (34 頁 ) DataAdapter イベントと 其等のイベントを使用する方法に付いて説明する DataSet への既存の制約の追加 (32 頁 ) 既存の制約を DataSet に追加する方法に付いて説明する ID 値と Autonumber 値の取得 (37 頁 ) Microsoft SQL Server テーブルの identity 列 又は Microsoft Access テーブルの Autonumber フィールド用に生成された値を テーブルの挿入行の列に割り当てる例を示する DataTable と DataColumn のマップの設定 (11 頁 ) DataAdapter の DataTableMappings と ColumnMappings のセットアップ方法に付いて説明する DataAdapter に依るデータソースの更新 (23 頁 ) DataSet のデータに加えた変更を解決してデータソースに戻る方法に付いて説明する クエリ結果のページング (9 頁 ) DataAdapter に依るバッチ更新の実行 (21 頁 ) DataAdapter に依る UDT 列の更新 (27 頁 ) DataAdapter からの DataSet の読み込み ADO.NET の DataSet は データソースに依存しない一貫したリレーショナルプログラミングモデルを提供するメモリ常駐型のデータ表現で有る DataSet は テーブル 制約 及び テーブル間のリレーションシップを含む完全なデータのセットを表す DataSet は データソースとは独立して居る為 DataSet には其のアプリケーションに固有のデータと複数のデータソースからのデータを含める事が出来る 既存のデータソースとの対話は DataAdapter に依って制御される DataAdapter の SelectCommand プロパティは データソースからデータを取得する Command オブジェクトで有る DataAdapter の InsertCommand UpdateCommand DeleteCommand の各プロパティは DataSet のデータに対して行われた変更に基づいてデータソースのデータ更新を管理する Command オブジェクトで有る 此等のプロパティに付いては DataAdapter に依るデータソースの更新 で更に詳しく説明する -4-

5 DataAdapter の Fill メソッドは DataAdapter の SelectCommand の結果を使用して DataSet を設定する為に使用する Fill は 自らの引数と仕て 設定対象で有る DataSet と DataTable オブジェクト ( 詰まり SelectCommand が返した行を格納して居る DataTable の名前 ) を受け取る Fill メソッドは DataReader オブジェクトを暗黙的に使用して DataSet 内でテーブルを作成する為の列の名前と型 及び DataSet 内のテーブルの行を設定する為のデータを返す テーブルや列は 存在しない場合に丈作成される 既に存在する場合は Fill は既存の DataSet スキーマを使用する 列の型は.NET Framework データプロバイダのデータ型から.NET Framework のデータ型への変換 の表に基づき.NET Framework の型と仕て作成される データソースに主キーが存在し DataAdapter.MissingSchemaAction が MissingSchemaAction.AddWithKey に設定されて居る場合丈 主キーが作成されるが 其れ以外の場合は主キーは作成されない Fill はテーブルに主キーが有る事が解ると 主キー列の値がデータソースから返された主キー列の値と一致する行に付いて データソースから返されたデータで DataSet 内のデータを上書きする 主キーが見付からない場合は DataSet のテーブルの末尾にデータを追加する Fill は DataSet にデータを読み込む時に存在する総てのマッピングを使用する ( DataTable と DataColumn のマップの設定 を参照され度い ) SelectCommand が OUTER JOIN の結果を返す場合 DataAdapter は 生成される DataTable に PrimaryKey 値を設定しない 開発者が PrimaryKey を定義して 重複行が正しく解決される様にする必要が有る 詳細に付いては テーブルの主キーの定義 を参照され度い Microsoft SQL Server Northwind データベースへの SqlConnection を使用し DataSet 内の DataTable に顧客リストを読み込む SqlDataAdapter のインスタンスを作成するコード例を次に示す SqlDataAdapter コンストラクタに渡される SQL ステートメントと SqlConnection 引数は SqlDataAdapter の SelectCommand プロパティを作成する為に使用される ' 変数 connection は 有効な SqlConnection オブジェクトとする Dim querystring As String = "SELECT CustomerID, CompanyName FROM dbo.customers" Dim adapter As SqlDataAdapter = New SqlDataAdapter( querystring, connection) Dim customers As DataSet = New DataSet adapter.fill(customers, "Customers") // 変数 connection は 有効な SqlConnection オブジェクトとする string querystring = "SELECT CustomerID, CompanyName FROM dbo.customers"; SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection); DataSet customers = new DataSet( ); adapter.fill(customers, "Customers"); 此のコード例では Connection の開始と終了を明示的に行って居ない Fill メソッドは 接続が未だ開いて居ない事を認識すると DataAdapter が使用して居る Connection を暗黙的に開く Fill が接続を開いた場合は Fill の終了時に Fill が接続を終了する 此れに依り Fill や Update 等の単一の操作を扱う場合にコードを簡略化出来る 此れに対し 開いて居る接続を必要とする複数の操作を実行する場合は Connection の Open メソッドを明示的に呼び出し データソースに対する操作の実行後に Connection の Close メソッドを呼び出す事でアプリケーションのパフォーマンスを改善出来る リソースを解放して他のクライアントアプリケーションが使用出来る様にする為に データソースへの接続を開いた儘にする時間は最小限にする事を推奨する -5-

6 複数結果セット DataAdapter は複数の結果セットを検出すると DataSet に複数のテーブルを作成する 此等のテーブルには Table0 の様に "Table" で始まるインクリメンタル既定名 TableN が割り当てられる テーブル名を引数と仕て Fill メソッドに渡すと TableName0 を表す "TableName" で始まるインクリメンタル既定名 TableNameN が割り当てられる 複数の DataAdapter からの DataSet の読み込み 1 つの DataSet で 任意の数の DataAdapter オブジェクトを使用出来る 夫々れの DataAdapter で 1 つ以上の DataTable オブジェクトにデータを格納し 関連するデータソースに更新を反映させる事が出来る DataSet に対して DataRelation オブジェクトや Constraint オブジェクトを部分的に追加出来る為 開発者は複数の異なるデータソースから取得したデータを関連付ける事が出来る 例えば Microsoft SQL Server データベース OLE DB を通じて公開される IBM DB2 データベース 及び XML をストリーム転送するデータソースからのデータを DataSet に含める事が出来る 1 つ以上の DataAdapter オブジェクトを使用して 各データソースとの通信を行う事が出来る 例 次のコード例では Microsoft SQL Server 2000 の Northwind データベースからの顧客リストと Microsoft Access 2000 に格納されて居る Northwind データベースからの注文リストを取得する データが格納されて居るテーブルが DataRelation に関連付けられ 顧客の一覧が各顧客の注文と共に表示される DataRelation オブジェクトの詳細に付いては テーブル間のリレーションシップの追加 及び テーブル間のリレーションシップの移動 を参照され度い ' 変数 customerconnection は 有効な SqlConnection オブジェクトとする ' 変数 orderconnection は 有効な OleDbConnection オブジェクトとする Dim custadapter As SqlDataAdapter = New SqlDataAdapter( _ "SELECT * FROM dbo.customers", customerconnection) Dim ordadapter As OleDbDataAdapter = New OleDbDataAdapter( _ "SELECT * FROM Orders", orderconnection) Dim customerorders As DataSet = New DataSet( ) custadapter.fill(customerorders, "Customers") ordadapter.fill(customerorders, "Orders") Dim relation As DataRelation = _ customerorders.relations.add("custorders", _ customerorders.tables("customers").columns("customerid"), _ customerorders.tables("orders").columns("customerid")) Dim prow, crow As DataRow For Each prow In customerorders.tables("customers").rows Console.WriteLine(pRow("CustomerID").ToString( )) For Each crow In prow.getchildrows(relation) Console.WriteLine(vbTab & crow("orderid").tostring( )) Next Next -6-

7 // 変数 customerconnection は 有効な SqlConnection オブジェクトとする // 変数 orderconnection は 有効な OleDbConnection オブジェクトとする // Assumes that customerconnection is a valid SqlConnection object. // Assumes that orderconnection is a valid OleDbConnection object. SqlDataAdapter custadapter = new SqlDataAdapter( "SELECT * FROM dbo.customers", customerconnection); OleDbDataAdapter ordadapter = new OleDbDataAdapter( "SELECT * FROM Orders", orderconnection); DataSet customerorders = new DataSet( ); custadapter.fill(customerorders, "Customers"); ordadapter.fill(customerorders, "Orders"); DataRelation relation = customerorders.relations.add("custorders", customerorders.tables["customers"].columns["customerid"], customerorders.tables["orders"].columns["customerid"]); foreach (DataRow prow in customerorders.tables["customers"].rows) Console.WriteLine(pRow["CustomerID"]); foreach (DataRow crow in prow.getchildrows(relation)) Console.WriteLine(" t" + crow["orderid"]); SQL Server の 10 進数型 既定では DataSet は.NET Framework のデータ型を使用してデータを格納する 殆どのアプリケーションで 此等のデータ型を使用してデータソース情報を簡単に表示出来る 併し データソースのデータ型が SQL Server の 10 進数データ型や数値データ型の場合は 此の表現に依って問題が生じる場合が有る.NET Framework の decimal データ型の最大有効桁数は 28 桁で有るのに対し SQL Server の decimal データ型の有効桁数は 38 桁で有る Fill が動作して居る間に SqlDataAdapter が SQL Server の decimal フィールドの有効桁数が 28 文字を超えて居ると判断した場合 現在の行は DataTable に追加されない 其の場合は FillError イベントが発生する為 開発者は有効桁数の消失が発生して居ないか何うかを確認し 適切に対応出来る FillError イベントの詳細に付いては DataAdapter イベントの使用 を参照され度い SQL Server の decimal 値を取得するには SqlDataReader オブジェクトを使用し GetSqlDecimal メソッドを呼び出す事も出来る ADO.NET 2.0 では DataSet の System.Data.SqlTypes に対するサポート機能が強化されて居る 詳細に付いては SqlTypes と DataSet を参照され度い OLE DB のチャプタ 階層構造の行セット 詰まり チャプタ (OLE DB では DBTYPE_HCHAPTER 型 ADO では adchapter 型 ) を使用して DataSet の内容を格納出来る OleDbDataAdapter が Fill が動作して居る間にチャプタ列を検出すると 其のチャプタ列の為の DataTable を作成し チャプタから取得した列と行を此のテーブルに格納する チャプタ列用に作成されたテーブルには 親テーブルの名前とチャプタ列の名前の両方を使用した "ParentTableNameChapteredColumnName" 形式の名前が割り当てられる DataSet にチャプタ列の名前と一致するテーブルが既に存在する場合は 現在のテーブルにチャプタデータが格納される 既存のテーブルにチャプタ内の列と一致する列が存在しない場合は 新しい列が追加される -7-

8 DataSet 内のテーブルにチャプタ列のデータを格納する前に 親テーブルと子テーブルの両方に 1 つの整数列を追加し 親列を自動インクリメントに設定し 両方のテーブルに追加された列を使用して DataRelation を作成すると 階層構造の行セットを形成して居る親テーブルと子テーブルの間にリレーションが作成される 追加されたリレーションには親テーブルの名前とチャプタ列の名前を使用した "ParentTableNameChapterColumnName" 形式の名前が割り当てられる 関連付けられた列は DataSet 丈に存在する 其のデータソースからの次の Fill 操作を実行すると 変更を既存の行にマージするのではなく テーブルに新しい行が追加される DataTable を受け取る DataAdapter.Fill オーバーロードを使用した場合は 其のテーブル丈にデータが格納される 自動インクリメント整数列は 引き続き其のテーブルに追加されるが 子テーブルの作成 子テーブルへのデータの格納 及び リレーションの作成は行われない MSDataShape プロバイダを使用して顧客リスト内の各顧客に対応するオーダー列を生成する例を次に示す チャプタ列を生成した後で 1 つの DataSet 内に其のデータを格納する Using connection As OleDbConnection = New OleDbConnection( _ "Provider=MSDataShape;Data Provider=SQLOLEDB;" & _ "Data Source=(local);Integrated " & _ "Security=SSPI;Initial Catalog=northwind") Dim adapter As OleDbDataAdapter = New OleDbDataAdapter( _ "SHAPE SELECT CustomerID, CompanyName FROM Customers " & _ "APPEND (SELECT CustomerID, OrderID FROM Orders AS Orders " & _ "RELATE CustomerID TO CustomerID)", connection) Dim customers As DataSet = New DataSet( ) adapter.fill(customers, "Customers") End Using using (OleDbConnection connection = new OleDbConnection( "Provider=MSDataShape;Data Provider=SQLOLEDB;" + "Data Source=(local);Integrated Security=SSPI;Initial Catalog=northwind")) OleDbDataAdapter adapter = new OleDbDataAdapter( "SHAPE SELECT CustomerID, CompanyName FROM Customers " + "APPEND (SELECT CustomerID, OrderID FROM Orders AS Orders " + "RELATE CustomerID TO CustomerID)", connection); DataSet customers = new DataSet( ); adapter.fill(customers, "Customers"); Fill 操作が完了すると DataSet に Customers と CustomersOrders の 2 つのテーブルが格納される CustomersOrders はチャプタ列を表す Orders と謂う列が Customers テーブルに追加され CustomersOrders と謂う列が CustomersOrders テーブルに追加される Customers テーブルの Orders 列は 自動インクリメントに設定される 親テーブルで有る Customers テーブルに追加された列を使用して CustomersOrders と謂う DataRelation が作成される サンプル結果の一部を次の表に示す -8-

9 TableName:Customers CustomerID CompanyName Orders ALFKI Alfreds Futterkiste 0 ANATR Ana Trujillo Emparedados y helados 1 TableName:CustomersOrders CustomerID OrderID CustomersOrders ALFKI ALFKI ANATR ANATR クエリ結果のページング クエリ結果のページングとは クエリ結果をデータの小さなサブセット 詰まり ページに分けて返すプロセスで有る クエリ結果のページングは 結果を管理し易い小さな単位でユーザーに表示する為に行われる一般的な処理で有る DataAdapter には Fill メソッドのオーバーロードを通じて 1 ページ分のデータ丈を返す機能が用意されて居る 併し 此れは大きなクエリ結果のページングには適して居ない DataAdapter が目的の DataTable 又は DataSet に 要求されたレコード丈を格納する一方で クエリ全体を返す為のリソースが使用される為で有る クエリ全体を返す必要が有るリソースを使用せずにデータソースから 1 ページ分のデータを返すには 必要な行丈返す様に限定する抽出条件をクエリに追加する Fill メソッドを使用して 1 ページ分のデータを返すには データページの先頭レコードを指定する startrecord パラメータとデータページのレコード数を指定する maxrecords パラメータを指定する Fill メソッドを使用してクエリ結果の最初のページ ( ページサイズ :5 つのレコード ) を返す方法を次のコード例に示す Dim currentindex As Integer = 0 Dim pagesize As Integer = 5 Dim ordersql As String = "SELECT * FROM dbo.orders ORDER BY OrderID" ' 変数 connection は 有効な SqlConnection オブジェクトとする Dim adapter As SqlDataAdapter = New SqlDataAdapter(orderSQL, connection) Dim dataset As DataSet = New DataSet( ) adapter.fill(dataset, currentindex, pagesize, "Orders") int currentindex = 0; int pagesize = 5; string ordersql = "SELECT * FROM Orders ORDER BY OrderID"; // 変数 connection は 有効な SqlConnection オブジェクトとする SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection); DataSet dataset = new DataSet( ); adapter.fill(dataset, currentindex, pagesize, "Orders"); -9-

10 上記の例では DataSet に 5 つのレコード丈が格納されるが Orders テーブル全体が返される DataSet に此れと同じ 5 つのレコードを格納し 5 つのレコード丈を返すには 次のコード例に示す様に SQL ステートメントで TOP 句と WHERE 句を使用する Dim pagesize As Integer = 5 Dim ordersql As String = "SELECT TOP " & pagesize & _ " * FROM Orders ORDER BY OrderID" Dim adapter As SqlDataAdapter = New SqlDataAdapter(orderSQL, connection) Dim dataset As DataSet = New DataSet( ) adapter.fill(dataset, "Orders") int pagesize = 5; string ordersql = "SELECT TOP " + pagesize + " * FROM Orders ORDER BY OrderID"; SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection); DataSet dataset = new DataSet( ); adapter.fill(dataset, "Orders"); 此の方法でクエリ結果をページングする時は 次のレコードページを返すコマンドに一意の ID を渡す為に 行を順序付けする固有の識別子を保存する必要が有る 次のコード例で示す Dim lastrecord As String = _ dataset.tables("orders").rows(pagesize - 1)("OrderID").ToString( ) string lastrecord = dataset.tables["orders"].rows[pagesize - 1]["OrderID"].ToString( ); startrecord パラメータと maxrecords パラメータを受け取る Fill メソッドのオーバーロードを使用して次のレコードページを返すには 現在のレコードインデックスをページサイズの分丈インクリメントし テーブルにレコードページを格納する DataSet に 1 ページ分のレコード丈を追加する場合でも データベースサーバーはクエリ結果全体を返す事に注意され度い 次のデータページを格納する前にテーブル行をクリアするコード例を次に示す データベースサーバーとの遣り取りを減らす為に ローカルのキャッシュに 返された一定数の行を保存する事も出来る currentindex = currentindex + pagesize dataset.tables("orders").rows.clear( ) adapter.fill(dataset, currentindex, pagesize, "Orders") currentindex += pagesize; dataset.tables["orders"].rows.clear( ); adapter.fill(dataset, currentindex, pagesize, "Orders"); -10-

11 データベースサーバーに依ってクエリ全体を返さずに次のレコードページを返すには SELECT ステートメントに限定的な抽出条件を指定する 上の例では最後に返されたレコードが保存されるが 次のコード例に示す様に其のレコードを WHERE 句で使用するとクエリの開始点を指定出来る ordersql = "SELECT TOP " & pagesize & _ " * FROM Orders WHERE OrderID > " & lastrecord & " ORDER BY OrderID" adapter.selectcommand.commandtext = ordersql dataset.tables("orders").rows.clear( ) adapter.fill(dataset, "Orders") ordersql = "SELECT TOP " + pagesize + " * FROM Orders WHERE OrderID > " + lastrecord + " ORDER BY OrderID"; adapter.selectcommand.commandtext = ordersql; dataset.tables["orders"].rows.clear( ); adapter.fill(dataset, "Orders"); DataTable と DataColumn のマップの設定 DataAdapter は TableMappings プロパティに 0 個以上の DataTableMapping オブジェクトのコレクションを持って居る DataTableMapping は データソースに対するクエリで返されたデータと DataTable の間のマスタのマップを提供する DataTableMapping 名は DataAdapter の Fill メソッドに DataTable 名の代わりと仕て渡す事が出来る Authors テーブルに対して AuthorsMapping と謂う名前の DataTableMapping を作成する例を次に示す workadapter.tablemappings.add("authorsmapping", "Authors") workadapter.tablemappings.add("authorsmapping", "Authors"); DataTableMapping を使用すると DataTable 内でデータベースの列名とは異なる列名を使用出来る DataAdapter は テーブルの更新時に此のマップを使用して列を一致させる DataAdapter の Fill メソッドや Update メソッドを呼び出す時に TableName や DataTableMapping 名を指定しなかった場合 DataAdapter は "Table" と謂う名前の DataTableMapping を検索する 其の DataTableMapping が存在しない場合は DataTable の TableName が "Table" に成る "Table" と謂う名前の DataTableMapping を作成する事で既定の DataTableMapping を指定出来る 次に示すのは System.Data.Common 名前空間から DataTableMapping を作成し 其れに "Table" と謂う名前を付けて 指定した DataAdapter の既定のマップと仕て設定するコード例で有る 此の例では 其の後 クエリ結果の最初のテーブル (Northwind データベースの Customers テーブル ) の列を DataSet の Northwind Customers テーブルに有る より解り易い名前のセットに割り当てる 割り当てられない列には データソースの列名が使用される Dim mapping As DataTableMapping = _ adapter.tablemappings.add("table", "NorthwindCustomers") mapping.columnmappings.add("companyname", "Company") mapping.columnmappings.add("contactname", "Contact") mapping.columnmappings.add("postalcode", "ZIPCode") adapter.fill(custds) -11-

12 DataTableMapping mapping = adapter.tablemappings.add("table", "NorthwindCustomers"); mapping.columnmappings.add("companyname", "Company"); mapping.columnmappings.add("contactname", "Contact"); mapping.columnmappings.add("postalcode", "ZIPCode"); adapter.fill(custds); 更に高度な条件下では 同じ DataAdapter を使用して複数の割り当てが設定された複数テーブルの読み込みのサポートが必要な場合が有る 此の場合 DataTableMapping オブジェクトを追加する Fill メソッドに DataSet のインスタンスと DataTableMapping 名が渡された時 其の名前の割り当てが存在する場合は其の名前が使用され 存在しない場合は其の名前の DataTable が使用される 次に示すのは Customers と謂う名前と BizTalkSchema と謂う DataTable 名を持つ DataTableMapping を作成する例で有る 此の例では 其の後で SELECT ステートメントで返された行を BizTalkSchema DataTable に割り当てゝ居る Dim mapping As ITableMapping = _ adapter.tablemappings.add("customers", "BizTalkSchema") mapping.columnmappings.add("customerid", "ClientID") mapping.columnmappings.add("companyname", "ClientName") mapping.columnmappings.add("contactname", "Contact") mapping.columnmappings.add("postalcode", "ZIP") adapter.fill(custds, "Customers") ITableMapping mapping = adapter.tablemappings.add("customers", "BizTalkSchema"); mapping.columnmappings.add("customerid", "ClientID"); mapping.columnmappings.add("companyname", "ClientName"); mapping.columnmappings.add("contactname", "Contact"); mapping.columnmappings.add("postalcode", "ZIP"); adapter.fill(custds, "Customers"); 列マップにソースの列名を指定しなかった場合 又は テーブルマップにソーステーブル名を指定しなかった場合は 自動的に既定の名前が生成される 列マップにソース列を指定しなかった場合は 列マップに SourceColumn1 から始まるインクリメンタル既定名 SourceColumnN が割り当てられる テーブルマップにソーステーブル名を指定しなかった場合は テーブルマップに SourceTable1 から始まるインクリメンタル既定名 SourceTableN が割り当てられる 列マップには SourceColumnN の命名規則を使用しない事 亦 テーブルの割り当てには SourceTableN を使用しない事を推奨する 此れは 指定した名前が ColumnMappingCollection 内の既存する既定の列マップ名 又は DataTableMappingCollection 内のテーブルマップ名と競合しない様にする為で有る 指定した名前が既に存在する場合は 例外がスローされる -12-

13 複数結果セット SelectCommand が複数のテーブルを返す場合 Fill は DataSet 内のテーブルに対するインクリメント値を含むテーブル名を自動的に生成する 此れは 指定したテーブル名で開始し TableNameN の形式で TableName1 から数値を加算して行く名前に成る 自動的に生成されたテーブル名は テーブルの割り当てを使用して DataSet 内でテーブルに指定する名前に変換出来る 例えば Customers と Orders と謂う 2 つのテーブルを返す SelectCommand に対して 次の Fill 呼出を実行する adapter.fill(customersdataset, "Customers") DataSet 内に Customers と Customers1 と謂う 2 つのテーブルが作成される テーブルマップを使用して 2 つ目のテーブルに Customers1 と謂う名前の代わりに Orders と謂う名前を付ける事が出来る 其れには 次の例に示す様に ソーステーブル Customers1 を DataSet テーブル Orders に割り当てる adapter.tablemappings.add("customers1", "Orders") adapter.fill(customersdataset, "Customers") DataAdapter に依るパラメータの使用 DataAdapter は データソースからデータを取得したりデータソースのデータを更新したりする為に使用される 次の 4 つのプロパティを持って居る SelectCommand プロパティは データソースからデータを返す InsertCommand UpdateCommand DeleteCommand の各プロパティは データソースの変更を管理する為に使用する SelectCommand プロパティは DataAdapter の Fill メソッドを呼び出す前に設定する必要が有る InsertCommand UpdateCommand DeleteCommand の各プロパティは DataAdapter の Update メソッドを呼び出す前に DataSet 内のデータに対して行われた変更に基づいて設定する必要が有る 例えば 行が追加された場合 InsertCommand は Update 呼出の前に設定されて居る必要が有る Update が挿入行 更新行 又は 削除行を処理して居る時 DataAdapter が夫々れの Command プロパティを使用して其のアクションを処理する 変更された行に付いての現在の情報が Parameters コレクションを通じて Command オブジェクトに渡される データソースの行を更新する時は 一意識別子を使用してテーブル内の更新する列を識別する UPDATE ステートメントを呼び出す 一意識別子は 一般には主キーフィールドの値で有る UPDATE ステートメントは 次の Transact-SQL ステートメントで示す様に 一意識別子 及び 更新する列と値の両方を含むパラメータを使用する UPDATE Customers SET CompanyName WHERE CustomerID パラメータのプレースホルダの構文は データソースに依って異なる 次に SQL Server のデータソースのプレースホルダの例を示す System.Data.OleDb パラメータと System.Data.Odbc パラメータのプレースホルダと仕て 疑問符 (? ) を使用する 此の の例では CompanyName フィールドは CustomerID パラメータの値で更新される 此等のパラメータは SqlParameter オブジェクトの SourceColumn プロパティを使用して 変更された行から情報を取得する 前のサンプル UPDATE ステートメントのパラメータを次に示す 此のコードは 変数 adapter が有効な SqlDataAdapter オブジェクトを表す事を前提と仕て居る -13-

14 adapter.parameters.add( _ "@CompanyName", SqlDbType.NChar, 15, "CompanyName") Dim parameter As SqlParameter = _ adapter.updatecommand.parameters.add("@customerid", _ SqlDbType.NChar, 5, "CustomerID") parameter.sourceversion = DataRowVersion.Original Parameters コレクションの Add メソッドは パラメータ名 DataAdapter 固有の型 サイズ ( 其の型に適用可能な場合 ) 及び DataTable の SourceColumn パラメータの SourceVersion が Original に設定されて居る事に注意され度い 此の設定に依り 変更済みの DataRow の中で 識別を行う 1 つ 又は 複数の列の値が既に変更されて居る場合に データソース内の既存の行を更新する事を保証出来る 識別列の値が既に変更されて居る場合は Original 行の値はデータソースの現在の値と一致し Current パラメータの SourceVersion は設定されて居ない為 既定の Current の行の値が使用される SqlClient の例 SQL ステートメントを SqlDataAdapter の SelectCommand InsertCommand UpdateCommand DeleteCommand の各プロパティの CommandText と仕て使用する例を次に示す SqlDataAdapter オブジェクトの場合は 名前付きのパラメータを使用する必要が有る Dim selectsql As String = _ "SELECT CustomerID, CompanyName FROM Customers " & _ "WHERE CountryRegion AND City Dim insertsql As String = _ "INSERT INTO Customers (CustomerID, CompanyName) " & _ "VALUES Dim updatesql As String = _ "UPDATE Customers SET CustomerID & _ "CompanyName " & _ "WHERE CustomerID Dim deletesql As String = _ "DELETE FROM Customers WHERE CustomerID string selectsql = "SELECT CustomerID, CompanyName FROM Customers WHERE CountryRegion = " + "@CountryRegion AND City string insertsql = "INSERT INTO Customers (CustomerID, CompanyName) " + "VALUES string updatesql = "UPDATE Customers SET CustomerID " + "CompanyName WHERE CustomerID string deletesql = "DELETE FROM Customers WHERE CustomerID OleDb 又は Odbc の例 OleDbDataAdapter オブジェクトと OdbcDataAdapter オブジェクトの場合は 疑問符 (? ) のプレースホルダを使用してパラメータを識別する必要が有る -14-

15 Dim selectsql As String = _ "SELECT CustomerID, CompanyName FROM Customers " & _ "WHERE CountryRegion =? AND City =?" Dim insertsql AS String = _ "INSERT INTO Customers (CustomerID, CompanyName) VALUES (?,?)" Dim updatesql AS String = _ "UPDATE Customers SET CustomerID =?, CompanyName =? " & _ WHERE CustomerID =?" Dim deletesql As String = "DELETE FROM Customers WHERE CustomerID =?" string selectsql = "SELECT CustomerID, CompanyName FROM Customers " + "WHERE CountryRegion =? AND City =?"; string insertsql = "INSERT INTO Customers (CustomerID, CompanyName) " + "VALUES (?,?)"; string updatesql = "UPDATE Customers SET CustomerID =?, CompanyName =? " + "WHERE CustomerID =? "; string deletesql = "DELETE FROM Customers WHERE CustomerID =?"; パラメータと仕て使用されるクエリステートメントは 作成する必要の有る入力パラメータと出力パラメータを定義する パラメータを作成するには Parameters.Add メソッド 又は Parameter コンストラクタを使用して列名 データ型 及び サイズを指定する Integer 等組み込みのデータ型の場合は サイズを含める必要は無いし 其の場合は自動的に既定のサイズを指定する事に成る 前例の SQL ステートメントのパラメータを作成し DataSet にデータを格納するコード例を次に示す SqlClient ' 変数 connection は 有効な SqlConnection オブジェクトとする Dim adapter As SqlDataAdapter = New SqlDataAdapter Dim selectcmd AS SqlCommand = New SqlCommand(selectSQL, connection) adapter.selectcommand = selectcmd selectcmd.parameters.add("@countryregion", SqlDbType.NVarChar, 15).Value = "UK" selectcmd.parameters.add("@city", SqlDbType.NVarChar, 15).Value = "London" Dim customers As DataSet = New DataSet adapter.fill(customers, "Customers") // 変数 connection は 有効な SqlConnection オブジェクトとする SqlDataAdapter adapter = new SqlDataAdapter( ); SqlCommand selectcmd = new SqlCommand(selectSQL, connection); adapter.selectcommand = selectcmd; selectcmd.parameters.add("@countryregion", SqlDbType.NVarChar, 15).Value = "UK"; selectcmd.parameters.add("@city", SqlDbType.NVarChar, 15).Value = "London"; DataSet customers = new DataSet( ); adapter.fill(customers, "Customers"); -15-

16 OleDb ' 変数 connection は 有効な OleDbConnection オブジェクトとする Dim adapter As OleDbDataAdapter = New OleDbDataAdapter Dim selectcmd AS OleDbCommand = New OleDbCommand(selectSQL, connection) adapter.selectcommand = selectcmd selectcmd.parameters.add("@countryregion", OleDbType.VarChar, 15).Value = "UK" selectcmd.parameters.add("@city", OleDbType.VarChar, 15).Value = "London" Dim customers As DataSet = New DataSet adapter.fill(customers, "Customers") // 変数 connection は 有効な OleDbConnection オブジェクトとする OleDbDataAdapter adapter = new OleDbDataAdapter( ); OleDbCommand selectcmd = new OleDbCommand(selectSQL, connection); adapter.selectcommand = selectcmd; selectcmd.parameters.add("@countryregion", OleDbType.VarChar, 15).Value = "UK"; selectcmd.parameters.add("@city", OleDbType.VarChar, 15).Value = "London"; DataSet customers = new DataSet( ); adapter.fill(customers, "Customers"); Odbc ' 変数 connection は 有効な OdbcConnection オブジェクトとする Dim adapter As OdbcDataAdapter = New OdbcDataAdapter Dim selectcmd AS OdbcCommand = New OdbcCommand(selectSQL, connection) adapter.selectcommand = selectcmd selectcmd.parameters.add("@countryregion", OdbcType.VarChar, 15).Value = "UK" selectcmd.parameters.add("@city", OdbcType.VarChar, 15).Value = "London" Dim customers As DataSet = New DataSet adapter.fill(customers, "Customers") // 変数 connection は 有効な OdbcConnection オブジェクトとする OdbcDataAdapter adapter = new OdbcDataAdapter( ); OdbcCommand selectcmd = new OdbcCommand(selectSQL, connection); adapter.selectcommand = selectcmd; selectcmd.parameters.add("@countryregion", OdbcType.VarChar, 15).Value = "UK"; selectcmd.parameters.add("@city", OdbcType.VarChar, 15).Value = "London"; DataSet customers = new DataSet( ); adapter.fill(customers, "Customers"); 或るパラメータに対してパラメータ名がサポートされて居ない場合は Parameter1 から増分して行く既定名 ParameterN が割り当てられる パラメータ名を指定する時には ParameterN の名前付けルールを使用しない事を推奨する 此れは 指定した名前が ParameterCollection 内の既存のパラメータ名と競合しない様にする為で有る 指定した名前が既に存在する場合は 例外が発生する -16-

17 Parameter.DbType パラメータの型は.NET Framework データプロバイダに固有の属性で有る 型が指定されて居る場合は 其の値がデータソースに渡される前に Parameter の値が.NET Framework データプロバイダ型に変換される Parameter オブジェクトの DbType プロパティを特定の DbType に設定する一般的な方法で Parameter の型を指定する事も出来る Parameter オブジェクトの.NET Framework データプロバイダ型は Parameter オブジェクトの Value の.NET Framework 型か 又は Parameter オブジェクトの DbType から推論される Parameter 値と仕て渡されるオブジェクト 又は 指定された DbType に基づいて推論される Parameter 型を 次の表に示す.NET Framework System.Data.DbType SqlDbType OleDbType OdbcType OracleType bool Boolean Bit Boolean Bit Byte byte Byte TinyInt UnsignedTinyInt TinyInt Byte byte[] Binary VarBinary. 2 VarBinary Binary Raw char 1 Char Char Byte DateTime DateTime DateTime DBTimeStamp DateTime DateTime Decimal Decimal Decimal Decimal Numeric Number double Double Float Double Double Double float Single Real Single Real Float Guid Guid UniqueIdentifier Guid UniqueIdentifier Raw Int16 Int16 SmallInt SmallInt SmallInt Int16 Int32 Int32 Int Int Int Int32 Int64 Int64 BitInt BigInt BigInt Number object Object Variant Variant 1 Blob string String NVarChar 3 VarWChar NVarChar NVarChar TimeSpan Time 1 DBTime Time DateTime UInt16 UInt16 1 UnsignedSmallInt Int UInt16 UInt32 UInt32 1 UnsignedInt BigInt UInt32 UInt64 UInt64 1 UnsignedBigInt Numeric Number AnsiString VarChar VarChar VarChar VarChar AnsiStringFixedLength Char Char Char Char Currency Money Currency 1 Number Date 1 DBDate Date DateTime SByte 1 TinyInt 1 SByte StringFixedLength NChar WChar NChar NChar Time 1 DBTime Time DateTime VarNumeric 1 VarNumeric 1 Number 1 サポートされて居ない 2 バイト配列が VarBinary の最大サイズ (8000 バイト ) より大きい場合は 此の暗黙の変換はエラーに成る 8000 バイトを超えるバイト配列の場合は 明示的に SqlDbType を設定する 3 文字列が NVarChar の最大サイズ (4000 文字 ) より大きい場合 此の暗黙の変換はエラーに成る 4000 文字を超える文字列の場合は 明示的に SqlDbType を設定する -17-

18 .NET Framework Version 1.0 に同梱されて居る.NET Framework データプロバイダは Decimal パラメータ値の Precision と Scale を確認しない為 切り捨てられたデータがデータソースに挿入される事が有る.NET Framework Version 1.0 を使用して居る場合は Decimal 値の Precision と Scale を検証してからパラメータ値を設定する.NET Framework Version 1.1 以降では Decimal パラメータ値で無効な Precision が設定されて居る場合 例外がスローされる Decimal パラメータスケールを超える Scale 値は 切り捨てられる.NET Framework Version 1.0 以降では System.Data.SqlTypes を System.Data.SqlClient と共に使用出来る 詳細に付いては SqlTypes の使用 を参照され度い Parameter.Direction Parameter の Direction を設定する為に ParameterDirection 列挙型で使用出来る値を次の表に示す メンバ名 説明 Input 此のパラメータは入力パラメータで有る ( 既定値 ) InputOutput 此のパラメータは入力と出力の両方の機能を持って居る Output 此のパラメータは出力パラメータで有る ReturnValue 此のパラメータは戻り値を表す Parameter の Direction を設定する方法を次のコード例に示す parameter.direction = ParameterDirection.Output Parameter.SourceColumn Parameter.SourceVersion SourceColumn と SourceVersion は Parameter コンストラクタに記述子と仕て渡したり 既存の Parameter のプロパティと仕て設定する事も出来る SourceColumn は Parameter の値の取得元で有る DataRow の DataColumn の名前で有る SourceVersion は DataAdapter が値を取得する為に使用する DataRow バージョンを指定する SourceVersion で使用出来る DataRowVersion 列挙型の値を次の表に示す メンバ名 説明 Current 此のパラメータは列の現在の値を使用する ( 既定値 ) Default 此のパラメータは列の DefaultValue を使用する Original 此のパラメータは列の元の値を使用する Proposed 此のパラメータは提示された値を使用する CustomerID 列を 2 CustomerID ) CustomerID の SourceColumn と仕て使用する UPDATE パラメータは CustomerID 列を DataRow の現在の値に更新する為に使用されて居る 其の為 SourceVersion を Current に設定した CustomerID SourceColumn パラメータは データソースの現在の行を識別する為に使用されて居る 其の行の Original バージョンで一致する列の値が見付かった為 SourceVersion を Original に設定した同じ SourceColumn(CustomerID) が使用されて居る -18-

19 SqlClient adapter.updatecommand.parameters.add( _ "@CustomerID", SqlDbType.NChar, 5, "CustomerID") adapter.updatecommand.parameters.add( _ "@CompanyName", SqlDbType.NVarChar, 40, "CompanyName") Dim parameter As SqlParameter = _ adapter.updatecommand.parameters.add("@oldcustomerid", _ SqlDbType.NChar, 5, "CustomerID") parameter.sourceversion = DataRowVersion.Original adapter.updatecommand.parameters.add( "@CustomerID", SqlDbType.NChar, 5, "CustomerID"); adapter.updatecommand.parameters.add( "@CompanyName", SqlDbType.NVarChar, 40, "CompanyName"); SqlParameter parameter = adapter.updatecommand.parameters.add( "@OldCustomerID", SqlDbType.NChar, 5, "CustomerID"); parameter.sourceversion = DataRowVersion.Original; UpdatedRowSource Command オブジェクトの UpdatedRowSource プロパティを使用すると データソースから返された値を DataSet に割り当てる方法を制御出来る UpdatedRowSource プロパティを UpdateRowSource 列挙型の値の 1 つに設定する事で DataAdapter コマンドが返したパラメータを無視するか DataSet 内の変更行に適用するかを制御出来る 最初に返された行 ( 存在する場合 ) を DataSet 内の変更行に適用するか何うかを指定する事も出来る UpdateRowSource 列挙型の様々の値と 其等の値が DataAdapter で使用されるコマンドの動作に何の様に影響するかを次の表で説明する UpdateRowSource Both FirstReturnedRecord None OutputParameters 説明出力パラメータと返された結果セットの最初の行を DataSet 内の変更行に割り当てる 返された結果セットの最初の行のデータ丈を DataSet 内の変更行に割り当てる 出力パラメータ又は返された結果セットの行が無視される 出力パラメータ丈を DataSet 内の変更行に割り当てる パラメータと戻り値の指定 ストアドプロシージャには 入力パラメータと出力パラメータの他に戻り値を含める事が出来る 次の例は ADO.NET が新しいレコードを 主キー列が SQL Server データベースの ID 列と成って居るテーブルに挿入して 入力パラメータ 出力パラメータ 及び 戻り値を受け渡す例を説明して居る 此の例では 次のストアドプロシージャを使用して Northwind Categories テーブルに新しいカテゴリを挿入する 此のストアドプロシージャは CategoryName 列の値を入力パラメータと仕て受け取り SCOPE_IDENTITY 関数を使用して ID フィールド CategoryID の新しい値を取得し 其の値を出力パ -19-

20 ラメータ内に返す RETURN ステートメントは 関数を使用して 挿入された行の数を返す CREATE PROCEDURE int OUTPUT AS SET NOCOUNT ON INSERT INTO Categories (CategoryName) = SCOPE_IDENTITY( ) 上述の InsertCategory ストアドプロシージャを SqlDataAdapter の InsertCommand 出力パラメータと戻り値は SqlDataAdapter の Update メソッドが呼び出され データベースにレコードが挿入された後で DataSet に反映される OleDbDataAdapter を使用する場合 ReturnValue の ParameterDirection を含むパラメータを他のパラメータより先に指定する必要が有る ' 変数 connection は 有効な SqlConnection オブジェクトとする Dim adapter As SqlDataAdapter = New SqlDataAdapter( _ "SELECT CategoryID, CategoryName FROM dbo.categories", connection) adapter.insertcommand = New SqlCommand( _ "InsertCategory", connection) adapter.insertcommand.commandtype = CommandType.StoredProcedure Dim parameter As SqlParameter = adapter.insertcommand.parameters.add( _ "@RowCount", SqlDbType.Int) parameter.direction = ParameterDirection.ReturnValue adapter.insertcommand.parameters.add( _ "@CategoryName", SqlDbType.NChar, 15, "CategoryName") parameter = adapter.insertcommand.parameters.add( _ "@Identity", SqlDbType.Int, 0, "CategoryID") parameter.direction = ParameterDirection.Output Dim categoriesds As DataSet = New DataSet( ) adapter.fill(categoriesds, "Categories") Dim newrow As DataRow = categoriesds.tables("categories").newrow( ) newrow("categoryname") = "New Category" categoriesds.tables("categories").rows.add(newrow) adapter.update(categoriesds, "Categories") Dim rowcount As Int32 = _ CInt(adapter.InsertCommand.Parameters("@RowCount").Value) -20-

21 // 変数 connection は 有効な SqlConnection オブジェクトとする SqlDataAdapter adapter = new SqlDataAdapter( "SELECT CategoryID, CategoryName FROM dbo.categories", connection); adapter.insertcommand = new SqlCommand("InsertCategory", connection); adapter.insertcommand.commandtype = CommandType.StoredProcedure; SqlParameter parameter = adapter.insertcommand.parameters.add( "@RowCount", SqlDbType.Int); parameter.direction = ParameterDirection.ReturnValue; adapter.insertcommand.parameters.add( "@CategoryName", SqlDbType.NChar, 15, "CategoryName"); parameter = adapter.insertcommand.parameters.add( "@Identity", SqlDbType.Int, 0, "CategoryID"); parameter.direction = ParameterDirection.Output; DataSet categoriesds = new DataSet( ); adapter.fill(categoriesds, "Categories"); DataRow newrow = categoriesds.tables["categories"].newrow( ); newrow["categoryname"] = "New Category"; categoriesds.tables["categories"].rows.add(newrow); adapter.update(categoriesds, "Categories"); Int32 rowcount = (Int32)adapter.InsertCommand.Parameters["@RowCount"].Value; DataAdapter に依るバッチ更新の実行 以前のバージョンの ADO.NET では DataSet に格納されて居る変更内容をデータベースに反映する場合 DataAdapter の Update メソッドを実行して 1 行宛データベースを更新して居た 此のメソッドは 指定された DataTable 内の行を反復処理すると 各 DataRow を調べ 行が変更された事を確認する 行が変更されて居る場合 其の行の RowState プロパティの値に基づいて 適切な UpdateCommand InsertCommand 又は DeleteCommand の孰れかを呼び出す 各行の更新では データベースへのネットワークラウンドトリップが発生する ADO.NET 2.0 では UpdateBatchSize プロパティが DataAdapter に依って公開される UpdateBatchSize を正の整数値に設定すると データベースの更新が指定されたサイズのバッチと仕て送信される 例えば UpdateBatchSize を 10 に設定すると 10 個の個別のステートメントがグループ化され 単一のバッチと仕て送信される UpdateBatchSize を 0 に設定すると DataAdapter は サーバーが処理出来る最大のバッチサイズを使用する 1 に設定すると バッチ更新が無効に成り 1 行宛送信される サイズの大きいバッチを実行すると パフォーマンスが低下する可能性が有る 其の為 アプリケーションを実装する前に バッチの最適なサイズ設定をテストする必要が有る UpdateBatchSize プロパティの使用 バッチ更新を有効にする場合 DataAdapter の UpdateCommand InsertCommand DeleteCommand -21-

22 の UpdatedRowSource プロパティ値を None か OutputParameters に設定する必要が有る バッチ更新を実行する際 FirstReturnedRecord 又は Both のコマンドの UpdatedRowSource プロパティ値は 無効に成る UpdateBatchSize プロパティを使用するプロシージャを次に示す 此のプロシージャは 2 つの引数を取る 1 つは Production.ProductCategory テーブル内の ProductCategoryID フィールドと Name フィールドを表す列を持つ DataSet オブジェクトで 今 1 つは バッチサイズ ( バッチファイル内の行数 ) を表す整数で有る 此のコードに依り 新しい SqlDataAdapter オブジェクトが作成され 其の UpdateCommand プロパティ InsertCommand プロパティ DeleteCommand プロパティが設定される 此のコードは DataSet オブジェクトに依って行が変更済みに成って居る事を前提と仕て居る 此のオブジェクトは UpdateBatchSize プロパティを設定し 更新を実行する Public Sub BatchUpdate(ByVal datatable As DataTable, ByVal batchsize As Int32) ' 関数 GetConnectionString が 有効な接続文字列を返す物とする Dim connectionstring As String = GetConnectionString( ) ' AdventureWorks データベースに接続 Using connection As New SqlConnection(connectionString) ' SqlDataAdapter の生成 Dim adapter As New SqlDataAdapter( ) ' UPDATE コマンドとパラメータの設定 adapter.updatecommand = New SqlCommand( _ "UPDATE Production.ProductCategory SET " & _ "Name=@Name WHERE ProductCategoryID=@ProdCatID;", connection) adapter.updatecommand.parameters.add("@name", _ SqlDbType.NVarChar, 50, "Name") adapter.updatecommand.parameters.add("@prodcatid", _ SqlDbType.Int, 4, " ProductCategoryID ") adapter.updatecommand.updatedrowsource = _ UpdateRowSource.None ' INSERT コマンドとパラメータの設定 adapter.insertcommand = New SqlCommand( _ "INSERT INTO Production.ProductCategory (Name) VALUES (@Name);", connection) adapter.insertcommand.parameters.add("@name", _ SqlDbType.NVarChar, 50, "Name") adapter.insertcommand.updatedrowsource = _ UpdateRowSource.None ' DELETE コマンドとパラメータの設定 adapter.deletecommand = New SqlCommand( _ "DELETE FROM Production.ProductCategory " & _ "WHERE ProductCategoryID=@ProdCatID;", connection) adapter.deletecommand.parameters.add("@prodcatid", _ SqlDbType.Int, 4, " ProductCategoryID ") adapter.deletecommand.updatedrowsource = UpdateRowSource.None ' バッチサイズの設定 adapter.updatebatchsize = batchsize ' Update の実行 adapter.update(datatable) End Using End Sub -22-

23 public static void BatchUpdate(DataTable datatable,int32 batchsize) // 関数 GetConnectionString が 有効な接続文字列を返す物とする string connectionstring = GetConnectionString( ); // AdventureWorks データベースに接続 using (SqlConnection connection = new SqlConnection(connectionString)) // SqlDataAdapter の生成 SqlDataAdapter adapter = new SqlDataAdapter( ); // UPDATE コマンドとパラメータの設定 adapter.updatecommand = new SqlCommand( "UPDATE Production.ProductCategory SET " + "Name=@Name WHERE ProductCategoryID=@ProdCatID;", connection); adapter.updatecommand.parameters.add("@name", SqlDbType.NVarChar, 50, "Name"); adapter.updatecommand.parameters.add("@prodcatid", SqlDbType.Int, 4, "ProductCategoryID"); adapter.updatecommand.updatedrowsource = UpdateRowSource.None; // INSERT コマンドとパラメータの設定 adapter.insertcommand = new SqlCommand( "INSERT INTO Production.ProductCategory (Name) VALUES (@Name);", connection); adapter.insertcommand.parameters.add("@name", SqlDbType.NVarChar, 50, "Name"); adapter.insertcommand.updatedrowsource = UpdateRowSource.None; // DELETE コマンドとパラメータの設定 adapter.deletecommand = new SqlCommand( "DELETE FROM Production.ProductCategory " + "WHERE ProductCategoryID=@ProdCatID;", connection); adapter.deletecommand.parameters.add("@prodcatid", SqlDbType.Int, 4, "ProductCategoryID"); adapter.deletecommand.updatedrowsource = UpdateRowSource.None; // バッチサイズの設定 adapter.updatebatchsize = batchsize; // Update の実行 adapter.update(datatable); DataAdapter に依るデータソースの更新 DataAdapter の Update メソッドを呼び出して 変更を DataSet からデータソースに反映する Update メソッドは Fill メソッドと同様に 引数と仕て DataSet のインスタンス 及び オプションの DataTable オブジェクト 又は DataTable 名を受け取る DataSet のインスタンスは 行われた変更点を格納する DataSet で有る DataTable は 変更点の取得元のテーブルで有る Update メソッドを呼び出すと DataAdapter は 既に加えられた変更を解析し 適切なコマンド (INSERT UPDATE 又は DELETE) を実行する DataAdapter は DataRow へ加えられた変更を検出すると InsertCommand UpdateCommand 又は DeleteCommand を使用して其の変更を -23-

24 処理する 其の結果 デザイン時にコマンド構文を指定し 可能な場合はストアドプロシージャを使用する事に依り ADO.NET アプリケーションのパフォーマンスを最適化出来る コマンドは Update を呼び出す前に明示的に設定する必要が有る Update を呼び出し 其の更新に関連する適切なコマンドが存在しない場合 ( 例えば 削除済みの行に関連する DeleteCommand が存在しない場合 ) は 例外がスローされる Command パラメータを使用して DataSet 内の各変更行に対する SQL ステートメントやストアドプロシージャに入力値と出力値を指定出来る 詳細に付いては DataAdapter に依るパラメータの使用 を参照され度い DataTable を単一データベーステーブルに割り当てたり 単一データベースから生成する場合は DbCommandBuilder オブジェクトを利用して自動的に DataAdapter の DeleteCommand InsertCommand 及び UpdateCommand を生成出来る 詳細に付いては コマンドの自動生成 を参照され度い Update メソッドは変更点を元のデータソースに反映させるが DataSet に最後にデータを格納した後 他のクライアントがデータソースのデータを変更した可能性も有る DataSet を現在のデータで更新するには DataAdapter 及び Fill メソッドを使用する 新しい行がテーブルに追加され 更新された情報が既存の行に取り込まれる Fill メソッドは DataSet の行と SelectCommand に依って返された行の主キーの値を調べて 新しい行が追加されたか 又は 既存の行が更新されたかを判断する Fill メソッドは SelectCommand に依って返された結果の行に一致する主キーの値を持つ DataSet の行を見付けた場合 SelectCommand に依って返された行の情報で既存の行を更新して 既存の行の RowState を Unchanged に設定する SelectCommand に依って返された行の主キーの値が DataSet の何の行の主キーの値にも一致しない場合 Fill メソッドは RowState が Unchanged の新しい行を追加する SelectCommand が OUTER JOIN の結果を返す場合 DataAdapter は 生成される DataTable に PrimaryKey 値を設定しない 自分で PrimaryKey を定義して 重複行が正しく反映される様にする必要が有る 詳細に付いては テーブルの主キーの定義 を参照され度い Update メソッド呼出時に発生する例外を処理するには 行更新エラーが発生した時に RowUpdated イベントを使用して応答するか ( DataAdapter イベントの使用 を参照 ) 又は Update メソッド呼出の前に DataAdapter.ContinueUpdateOnError を true に設定し 更新が完了した時点で特定の行の RowError プロパティに格納されて居るエラー情報に応答する ( 行のエラー情報の追加と読み取り を参照 ) DataSet DataTable 又は DataRow に対して AcceptChanges を呼び出すと DataRow の総ての Original 値が DataRow の Current 値で上書きされる 行を一意に識別するフィールド値が変更された場合は AcceptChanges 呼出の後 Original 値はデータソースの値と一致しなく成る DataAdapter の UpdateCommand を明示的に設定して 変更済みの行に対して更新を実行する方法を次の例に示す UPDATE ステートメントの WHERE 句に指定したパラメータが SourceColumn の Original 値を使用する様に設定されて居る事に注意され度い Current 値が既に変更されて居る可能性 然して データソースの値と一致して居ない可能性が有る為 此の設定は重要で有る Original 値は データソースから DataTable にデータを取得する為に使用された値で有る ' 変数 connection は 有効な SqlConnection オブジェクトとする Dim adapter As SqlDataAdapter = New SqlDataAdapter( _ "SELECT CategoryID, CategoryName FROM Categories", connection) -24-

25 adapter.updatecommand = New SqlCommand( _ "UPDATE Categories SET CategoryName " & _ "WHERE CategoryID connection) adapter.updatecommand.parameters.add( _ "@CategoryName", SqlDbType.NVarChar, 15, "CategoryName") Dim parameter As SqlParameter = adapter.updatecommand.parameters.add( _ "@CategoryID", SqlDbType.Int) parameter.sourcecolumn = "CategoryID" parameter.sourceversion = DataRowVersion.Original Dim dataset As DataSet = New DataSet adapter.fill(dataset, "Categories") Dim row As DataRow = dataset.tables("categories").rows(0) row("categoryname") = "New Category" adapter.update(dataset, "Categories") // 変数 connection は 有効な SqlConnection オブジェクトとする SqlDataAdapter dataadpater = new SqlDataAdapter( "SELECT CategoryID, CategoryName FROM Categories", connection); dataadpater.updatecommand = new SqlCommand( "UPDATE Categories SET CategoryName " + "WHERE CategoryID connection); dataadpater.updatecommand.parameters.add( "@CategoryName", SqlDbType.NVarChar, 15, "CategoryName"); SqlParameter parameter = dataadpater.updatecommand.parameters.add( "@CategoryID", SqlDbType.Int); parameter.sourcecolumn = "CategoryID"; parameter.sourceversion = DataRowVersion.Original; DataSet dataset = new DataSet( ); dataadpater.fill(dataset, "Categories"); DataRow row = dataset.tables["categories"].rows[0]; row ["CategoryName"] = "New Category"; dataadpater.update(dataset, "Categories"); AutoIncrement 列 データソースからのテーブルに自動インクリメント列が有る場合 DataSet の列に値を格納するには 自動インクリメント値をストアドプロシージャの出力パラメータと仕て返して其れをテーブルの列に割り当てるか 又は DataAdapter の RowUpdated イベントを使用する 此の例に付いては ID 値と Autonumber 値の取得 を参照され度い 但し DataSet 内の値はデータソースの値と同期しなく成る為 予期しない動作を発生する場合が有る 例えば CustomerID と謂う自動インクリメント主キー列を持つテーブルが有るとする DataSet 内に -25-

26 新しい 2 人の顧客を追加した場合 此等の顧客は自動インクリメント CustomerId 値 1 と 2 を受け取る 2 行目の顧客行が DataAdapter の Update メソッドに渡されると 新しく追加された行は データソースで自動インクリメント CustomerID 値 1 を受け取る 此れは DataSet 内の値 2 とは一致しない DataAdapter が DataSet の行に戻り値を設定すると 1 行目の顧客行が既に CustomerID 値と仕て 1 を持つ為制約違反が発生する 此の様な動作を防ぐには データソースの自動インクリメント列と DataSet の自動インクリメント値を使用する時に AutoIncrementStep を -1 AutoIncrementSeed を 0 に設定して DataSet に列を作成し 同時に 1 から始まり正のステップ値でインクリメントする自動インクリメント ID 値がデータソースで生成される様にする 其の結果 DataSet では自動インクリメント値と仕て負の数値が生成される為 データソースで生成される正の自動インクリメント値と矛盾しなく成る 今 1 つの方法は 自動インクリメント列の代わりに Guid 型の列を使用する事で有る Guid 値生成のアルゴリズムでは データソースで生成される Guid と同じ Guid が DataSet で生成される事は無い DataTable の列を定義する方法の詳細に付いては DataTable のスキーマの定義 を参照され度い 挿入 更新 削除の順序 通常の条件下では DataSet を使用して行う変更の順序をデータソースに送信する事が重要で有る 例えば 既存の行の主キーの値を更新し 其の新しい主キーの値で新しい行を追加する場合 更新は挿入の前に処理する必要が有る DataTable の Select メソッドを使用すると 特定の RowState を持つ行丈を参照する DataRow 配列を返す事が出来る 其の後で 返された DataRow 配列を DataAdapter の Update メソッドに渡して変更行を処理出来る 更新する行のサブセットを指定する事で 挿入 更新 削除の処理順序を制御出来る 例えば次のコードでは テーブルの削除行を最初に処理し 次に更新行 最後に挿入行を処理する Dim table As DataTable = dataset.tables("customers") ' 最初に削除を処理 dataset.update(table.select(nothing, Nothing, _ DataViewRowState.Deleted)) ' 次に更新を処理 adapter.update(table.select(nothing, Nothing, _ DataViewRowState.ModifiedCurrent)) ' 最後に挿入を処理 dataadpater.update(table.select(nothing, Nothing, _ DataViewRowState.Added)) DataTable table = dataset.tables["customers"]; // 最初に削除を処理 adapter.update(table.select(null, null, DataViewRowState.Deleted)); // 次に更新を処理 adapter.update(table.select(null, null, DataViewRowState.ModifiedCurrent)); // 最後に挿入を処理 adapter.update(table.select(null, null, DataViewRowState.Added)); -26-

27 DataAdapter に依る UDT 列の更新 ユーザー定義型 (UDT) に依り DataSet と SqlDataAdapter を使用したデータの取得や変更がサポートされて居る データセットの読み込み Transact-SQL の SELECT ステートメントを使用する事で UDT 列の値を選択してデータアダプタを使用し データセットを読み込む事が出来る 次の例では 以下に示す構造とサンプルデータで Points テーブルが定義されて居る事を前提と仕て居る 次の Transact-SQL ステートメントに依って Points テーブルが作成され 数行が挿入される CREATE TABLE dbo.points (id int PRIMARY Key, p Point); INSERT INTO dbo.points VALUES (1, CONVERT(Point, '1,3')); INSERT INTO dbo.points VALUES (2, CONVERT(Point, '2,4')); INSERT INTO dbo.points VALUES (3, CONVERT(Point, '3,5')); INSERT INTO dbo.points VALUES (4, CONVERT(Point, '4,6')); GO 次に示す ADO.NET コードでは 有効な接続文字列が取得され 新しい SqlDataAdapter が作成され Points テーブルからのデータ行が DataTable に読み込まれる Dim da As New SqlDataAdapter( _ "SELECT id, p FROM dbo.points", connectionstring) Dim dattable As New DataTable("Points") da.fill(dattable) SqlDataAdapter da = new SqlDataAdapter( "SELECT id, p FROM dbo.points", connectionstring); DataTable dattable = new DataTable("Points"); da.fill(dattable); データセットでの UDT データの更新 DataSet で UDT 列を更新するには 次の 2 つの方法が有る SqlDataAdapter オブジェクトに カスタムの InsertCommand UpdateCommand DeleteCommand オブジェクトを指定する コマンドビルダ (SqlCommandBuilder) を使用する事で INSERT UPDATE DELETE コマンドが自動的に作成される 競合を検出するには timestamp 列 ( エイリアス rowversion) を UDT を含む SQL Server テーブルに追加する timestamp データ型は テーブル内の行のバージョンスタンプ用に使用され データベース内で一意で有る事が保証される 此れに依って テーブル内の各行に付いて自動的に生成された 8 バイトの 2 進数が公開され テーブル内の値が変更された場合に自動的に更新される 但し SqlCommandBuilder では 基に成るテーブル内に timestamp 列が存在しない限り 競合の検出に付いて UDT は考慮されない 各 UDT が同等でない事が有る為 コマンドの生成に "compare original values" オプションが使用される場合は WHERE 句には UDT が含まれない -27-

28 次の例では Point UDT 列と timestamp 列を含む 2 番目のテーブルを作成する必要が有る 両方のテーブルを使用して カスタムコマンドオブジェクトを作成してデータを更新する方法と timestamp 列を使用して更新する方法を示す 次の Transact-SQL ステートメントを実行して 2 番目のテーブルを作成し サンプルデータを読み込む CREATE TABLE dbo.points_ts (id int PRIMARY KEY, p Point, ts timestamp); INSERT INTO dbo.points_ts (id, p) VALUES (1, CONVERT(Point, '1,3')); INSERT INTO dbo.points_ts (id, p) VALUES (2, CONVERT(Point, '2,4')); INSERT INTO dbo.points_ts (id, p) VALUES (3, CONVERT(Point, '3,5')); INSERT INTO dbo.points_ts (id, p) VALUES (4, CONVERT(Point, '4,6')); 次の ADO.NET の例には 2 つのメソッドが有る UserProvidedCommands は InsertCommand UpdateCommand DeleteCommand オブジェクトを作成して Points テーブル (timestamp 列を含まない ) の Point UDT を更新する方法を示す CommandBuilder は timestamp 列を含む Points_ts テーブルで SqlCommandBuilder を使用する方法を示す Imports System Imports System.Data Imports System.Data.SqlClient Module Module1 ' 接続文字列の取得 Private connstring As String = GetConnectionString( ) Sub Main( ) UserProvidedCommands( ) CommandBuilder( ) End Sub Private Sub UserProvidedCommands( ) ' 新しい SqlDataAdapter の生成 Dim da As New SqlDataAdapter( "SELECT id, p FROM dbo.points", connstring) ' INSERT/UPDATE/DELETE コマンドの設定 Dim idparam As SqlParameter Dim pointparam As SqlParameter da.insertcommand = New SqlCommand( _ "INSERT INTO dbo.points (id, p) VALUES da.selectcommand.connection) idparam = da.insertcommand.parameters.add("@id", SqlDbType.Int) idparam.sourcecolumn = "id" pointparam = da.insertcommand.parameters.add("@p", SqlDbType.Udt) pointparam.sourcecolumn = "p" pointparam.udttypename = "dbo.point" da.updatecommand = New SqlCommand( _ "UPDATE dbo.points SET p WHERE id da.selectcommand.connection) idparam = da.updatecommand.parameters.add("@id", SqlDbType.Int) -28-

29 idparam.sourcecolumn = "id" pointparam = da.updatecommand.parameters.add("@p", SqlDbType.Udt) pointparam.sourcecolumn = "p" pointparam.udttypename = "dbo.point" da.deletecommand = New SqlCommand( _ "DELETE dbo.points WHERE id da.selectcommand.connection) idparam = da.deletecommand.parameters.add("@id", SqlDbType.Int) idparam.sourcecolumn = "id" ' DataTable に UDT rows を格納 Dim dattable As New DataTable("Points") da.fill(dattable) ' Point 列の内容の表示 Dim r As DataRow For Each r In dattable.rows Dim p As Point = CType(r(1), Point) Console.WriteLine("ID: 0, x=1, y=1", r(0), p.x, p.y) Next r ' 行の更新 (DataTable に行が有る場合 ) If dattable.rows.count > 0 Then Dim oldpoint As Point = CType(datTable.Rows(0)(1), Point) dattable.rows(0)(1) = New Point(oldPoint.X + 1, oldpoint.y + 1) End If ' 最終行の削除 ( 行が有る場合 ) If dattable.rows.count > 0 Then dattable.rows(1).delete( ) End If ' 行の挿入 (100 は主キーの値なので 2 度実行すると失敗する ) dattable.rows.add(100, New Point(100, 200)) ' データベースに変更を書き戻し da.update(dattable) End Sub Private Sub CommandBuilder( ) ' 新しい SqlDataAdapter の生成 Dim da As New SqlDataAdapter( "SELECT id, ts, p FROM dbo.points_ts", connstring) ' データベースから UDT で行を抽出 Dim dattable As New DataTable("Points") da.fill(dattable) ' Point 列の内容の表示 Dim r As DataRow For Each r In dattable.rows Dim p As Point = CType(r(2), Point) Console.WriteLine("ID: 0, x=1, y=1", r(0), p.x, p.y) Next r -29-

30 ' 行の更新 (DataTable に行が有る場合 ) If dattable.rows.count > 0 Then Dim oldpoint As Point = CType(datTable.Rows(0)(2), Point) dattable.rows(0)(2) = New Point(oldPoint.X + 1, oldpoint.y + 1) End If ' 最終行の削除 ( 行が有る場合 ) If dattable.rows.count > 0 Then dattable.rows(1).delete( ) End If ' 行の挿入 (100 は主キーの値なので 2 度実行すると失敗する ) dattable.rows.add(100, Nothing, New Point(100, 200)) ' CommandBuilder を使用して DML ステートメントの作成 Dim bld As New SqlCommandBuilder(da) bld.conflictdetection = ConflictOptions.CompareRowVersion ' データベースに変更を書き戻し da.update(dattable) End Sub Private Function GetConnectionString( ) As String ' 設定ファイルより接続文字列の取得 Return "Data Source=(local);Initial Catalog=AdventureWorks; Integrated Security=SSPI" End Function End Module using System; using System.Data; using System.Data.SqlClient; class Class1 // 接続文字列の取得 private string connstring = GetConnectionString( ); static void Main( ) UserProvidedCommands( ); CommandBuilder( ); static void UserProvidedCommands( ) // 新しい SqlDataAdapter の生成 SqlDataAdapter da = new SqlDataAdapter("SELECT id, p FROM dbo.points", connstring); // INSERT/UPDATE/DELETE コマンドの設定 SqlParameter idparam; SqlParameter pointparam; da.insertcommand = new SqlCommand( "INSERT INTO dbo.points (id, p) VALUES da.selectcommand.connection); -30-

ファイル操作

ファイル操作 データセット DataSet クラス データのメモリ内キャッシュを表す 名前空間 :System.Data アセンブリ :System.Data(system.data.dll 内 ) 解説 データソースから取得されたデータのメモリ内キャッシュで有る DataSet は ADO.NET アーキテクチャの主要コンポーネントで有る DataSet は DataRelation オブジェクトと相互に関連付ける事が出来る

More information

ADO.NETのアーキテクチャ

ADO.NETのアーキテクチャ データベース ADO.NET のアーキテクチャ 従来のデータ処理は 主に接続をベースとした 2 層モデルに基づいて居た 最近のデータ処理では 多階層アーキテクチャが多用される様に成った為 プログラマは 非接続型アプローチへと切り替えて アプリケーションに より優れたスケーラビリティを提供して居る ADO.NET のコンポーネント ADO.NET には データへのアクセスとデータの操作に使用出来るコンポーネントが

More information

データアダプタ概要

データアダプタ概要 データベース TableAdapter クエリを実行する方法 TableAdapter クエリは アプリケーションがデータベースに対して実行出来る SQL ステートメントやストアドプロシージャで TableAdapter で型指定されたメソッドと仕て公開される TableAdapter クエリは 所有るオブジェクトのメソッドと同様に 関連付けられたメソッドを呼び出す事に依り実行出来る TableAdapter

More information

データアダプタ概要

データアダプタ概要 データベース データアダプタ データアダプタの概要 データアダプタは ADO.NET マネージプロバイダの重要な部分で有り データソースとデータセットの間の通信に使用されるオブジェクトのセットで有る マネージプロバイダには アダプタの他に接続オブジェクト データリーダーオブジェクト 及び コマンドオブジェクトが含まれる アダプタは データソースとデータセットの間でデータを交換する為に使用される 多くのアプリケーションでは

More information

VB実用⑤ アクセス操作Ⅲ

VB実用⑤ アクセス操作Ⅲ VB でアクセス操作 Ⅲ VB 2005 5 プログラムの概要 前回に引き続き 此処では コードに依るデータベースの操作方法を学ぶ コネクションオブジェクトを用いてデータベースと接続し 表形式でデータを表示するデータグリッドビューコントロールにレコードデータを自動的に表示する手法を学ぶ 既に学んだ様にコントロールを連結する事に依り コードレスでデータベース操作が可能で有るが 此処では 着目して居る行

More information

VB実用③ アクセス操作Ⅰ

VB実用③ アクセス操作Ⅰ VB でアクセス操作 Ⅰ VB 2005 3 プログラムの概要 此処では コントロールを使用しないで コードに依るデータベースへの接続とデータの取得の方法を学ぶ コントロールに依るデータベース接続は 簡単にデータベースを操作する事が出来ると謂う利点が有り 小規模な運用で有れば 充分な能力を発揮する 併し 中規模 大規模に成り 複雑な操作を必要とする様に成れば 力不足に成る可能性が高く成る 然う成れば

More information

VB.NET解説

VB.NET解説 Visual Basic.NET データベース編 目次 ADO.NET の概要... 2 ADO.NET と ADO... 2 ADO.NET の仕組み... 4 ADO.NET の特徴... 7 データアクセスの基本... 8 Windows アプリケーションの開発手順... 8 データ接続の作成... 9 データアダプタとコネクションの作成...10 データセットの作成...14 データアクセスの利用...21

More information

TableAdapterクラス

TableAdapterクラス テーブルアダプタ TableAdapter の概要 TableAdapter を使用すると アプリケーションとデータベース間で通信する事が出来る様に成る 具体的には TableAdapter は データベースに接続し クエリやストアドプロシージャを実行し 返されたデータが格納された新しいデータテーブルを返すか 返されたデータを既存の DataTable に格納する TableAdapter は 更新されたデータをアプリケーションからデータベースに送り返す場合にも使用する

More information

ICONファイルフォーマット

ICONファイルフォーマット グラフィックス 画像フォーマットエンコーダパラメータ 様々なフォーマットで画像を保存 Bitmap クラスを用いる事でビットマップ JPEG GIF PNG 等様々なフォーマットの画像を読み込み操作する事が出来る 更に Bitmap クラスや Graphics コンテナを用いて描画処理等を施したイメージをファイルに保存する事も出来る 此の時 読み込めるフォーマット同様に保存するフォーマットを選択する事が出来る

More information

データベースプログラミング

データベースプログラミング データセットとデータテーブル データセット (DataSet) とは何かに付いて 簡単に説明する データセットとは 典型的な.NET の Windows データベースアプリケーションでは データセットを通じてアプリケーションからデータベースにアクセスする データセットとは 簡単に謂うと データベースから取得したレコードをメモリ上に持つ為の入れ物で有る 例えば データベースからレコードを取得し 其れをグリッドコントロールに表示する様な

More information

Microsoft Word - Android_SQLite講座_画面800×1280

Microsoft Word - Android_SQLite講座_画面800×1280 Page 24 11 SQLite の概要 Android にはリレーショナルデータベースである SQLite が標準で掲載されています リレーショナルデータベースは データを表の形で扱うことができるデータベースです リレーショナルデータベースには SQL と呼ばれる言語によって簡単にデータの操作や問い合わせができようになっています SQLite は クライアントサーバ形式ではなく端末の中で処理が完結します

More information

ファイル操作-バイナリファイル

ファイル操作-バイナリファイル ファイル操作 バイナリ ファイルを読み書きする バイナリファイル ( 即ちテキストファイル以外のファイル ) を読み書きするには FileStream クラス (System.IO 名前空間 ) を利用する FileStream クラスはファイル用のストリームをサポートするクラスで有り Stream クラス (System.IO 名前空間 ) の派生クラスの 1 つで有る 基本的には コンストラクタで指定したファイルのストリームに対して

More information

问题集 ITEXAMPASS 1 年で無料進級することに提供する

问题集 ITEXAMPASS   1 年で無料進級することに提供する 问题集 ITEXAMPASS https://www.itexampass.jp 1 年で無料進級することに提供する Exam : 70-762 Title : Developing SQL Databases Version : DEMO 1 / 10 1. ドラッグドロップ注 : この質問は 同じシナリオを使用する一連の質問の一部です あなたの便宜のために シナリオは各質問で繰り返されます 各質問は異なる目標と答えの選択を提示しますが

More information

ファイル操作

ファイル操作 ファイル操作 TextFieldParser オブジェクト ストリームの読込と書込 Microsoft.VisualBasic.FileIO 名前空間の TextFieldParser オブジェクトは 構造化テキストファイルの解析に使用するメソッドとプロパティを備えたオブジェクトで有る テキストファイルを TextFieldParser で解析するのは テキストファイルを反復処理するのと同じで有り

More information

VB実用④ アクセス操作Ⅱ

VB実用④ アクセス操作Ⅱ VB でアクセス操作 Ⅱ VB 2005 4 プログラムの概要 前回に引き続き 此処では コードに依るデータベースの操作方法を学ぶ コネクションオブジェクトを用いてデータベースと接続し 表形式でデータを表示するデータグリッドビューコントロールにレコードデータを自動的に表示する手法を学ぶ 既に学んだ様にコントロールを連結する事に依り コードレスでデータベース操作が可能で有るが 此処では 着目して居る行

More information

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値 ( 此処では 10) を代入する丈でなく 2 の配列変数の宣言の様に ブレース { } の中にカンマ区切りで初期値のリストを記述し 配列の各要素に初期値を代入出来る様に成った

More information

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058 1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058 2 Excel 1 SQL 1 SQL Server sp_executesql Oracle SQL

More information

Case 0 sqlcmdi.parameters("?tencode").value = Iidata(0) sqlcmdi.parameters("?tenname").value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else

Case 0 sqlcmdi.parameters(?tencode).value = Iidata(0) sqlcmdi.parameters(?tenname).value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else Imports MySql.Data.MySqlClient Imports System.IO Public Class Form1 中間省略 Private Sub コマンドテストCToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles コマンドテストCToolStripMenuItem.Click

More information

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第7版   None

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第7版   None クイック検索検索 目次 Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 改訂情報概要レコードの追加 / 更新 / 削除レコードの編集レコードを削除するレコードの一括インポートとエクスポート日本語のキャプション表示 2 改訂情報 変更年月日 変更内容 2012-10-01 初版 2013-10-01 第 2 版下記が追加 変更されました 対応するフィールドの型

More information

mySQLの利用

mySQLの利用 MySQL の利用 インストール インストール時に特に注意点は無い 本稿記述時のバージョンは 6.5.4 で有る (2017 年 11 月現在では 6.10.4 で https://dev.mysql.com/downloads/connector/net/6.10.html よりダウンロード出来る ) 参照設定 インストールが終了すれば Visual Studio で参照の設定を行う 参照の設定画面で

More information

ハッシュテーブル

ハッシュテーブル ハッシュテーブル ハッシュテーブル ( 連想配列 ) を使う ハッシュテーブルとは キー (key) と値 (value) のペアを保持して居るコレクションで有る 通常の配列がインデックス番号に依り各値 ( 各要素 ) にアクセス出来るのに比べて ハッシュテーブルでは インデックス番号の代わりにキーを用いて 其の各値にアクセスする事が出来る キーと 其のキーから連想される ( 対応付けられて居る )

More information

Microsoft認定資格問題集(70-483_demo)

Microsoft認定資格問題集(70-483_demo) Microsoft 認定資格問題集 受験番号 : 70-483 受験名 : C# でのプログラミング言語 : 日本語問題数 :179 問 テストバリュー (TESTVALUE) はこの日本語版問題集の著作権を所有します 問題集の他人への展開 譲渡 転売 複製 転載等の無断行為は法律上で禁止されています 違反が発覚した場合 法的措置を取らせて頂きますので 予めご了承ください 問題 1 Orderオブジェクトのコレクションがあります

More information

正規表現応用

正規表現応用 正規表現 正規表現を使って文字列が或る形式と一致するか調べる 指定された正規表現のパターンと一致する対象が入力文字列内で見付かるか何うかを調べるには Regex クラスの IsMatch メソッドを使用する 此処では IsMatch メソッドを使った例を幾つか紹介する 猶 正規表現のパターンと一致する個所を探し 見付かれば 其の箇所を抽出する方法は 正規表現を使って文字列を検索し 抽出する で紹介して居る

More information

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第8版  

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第8版   Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 改訂情報概要レコードの追加 / 更新 / 削除レコードの編集レコードを削除するレコードの一括インポートとエクスポート日本語のキャプション表示 2 改訂情報 変更年月日 変更内容 2012-10-01 初版 2013-10-01 第 2 版下記が追加 変更されました 対応するフィールドの型 が追加されました

More information

VB.NET解説

VB.NET解説 Visual Basic.NET 印刷編 目次 印刷の概要... 2 印刷の流れ... 2 標準の Windows フォーム印刷ジョブの作成... 3 実行時に於ける Windows フォーム印刷オプションの変更... 3 Windows フォームに於ける接続されたプリンタの選択... 4 Windows フォームでのグラフィックスの印刷... 5 Windows フォームでのテキストの印刷...

More information

データベースの更新の実行

データベースの更新の実行 データベース データベースの更新の実行 概要 解らない事を信じて居るから 苦しむのさ 迷信は駄目だ スティービーワンダー スティービーワンダーは 勿論データベースの更新の事を謂って居た訳ではないだろうが 此の言葉は確かに此のテーマにも当て嵌る ADO.NET のデータベース更新機能は非常に強力だが.NET がベータ版だった頃に内外のニュースグループに寄せられた疑問や セミナー等で出された質問からすると

More information

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作 Access 2007 と SQL Server Express を使用 SQL 文は SQL Server 主体で解説 Access 版ノースウィンドウデータベースを使用 DBMS プログラム サーバーエクスプローラ SQL 文 実行結果 データベース エンジン データベース SQL 文とは 1 度のコマンドで必要なデータを効率よく取得するための技術といえます

More information

DAOの利用

DAOの利用 DAO VB2005 で DAO を使用して Excel のデータを取得 Visual Basic 6.0 Dim DB As DAO.Database Dim RS As DAO.Recordset Dim xlfilename As String Dim xlsheetname As String xlfilename = Form1.StatusBar1.Panels(12) & Dir(Form1.StatusBar1.Panels(12)

More information

プロセス間通信

プロセス間通信 プロセス間通信 プロセス間通信 (SendMessage) プロセス間通信とは 同一コンピューター上で起動して居るアプリケーション間でデータを受け渡し度い事は時々有る Framework には リモート処理 と謂う方法でデータの受け渡しを行なう方法が有る 此処では 此の方法では無く 従来の方法の API を使用したプロセス間通信を紹介する 此の方法は 送信側は API の SendMessage で送り

More information

ファイル操作-インターネットキャッシュ

ファイル操作-インターネットキャッシュ ファイル操作 インターネット一時ファイルの保存場所 インターネットキャッシュ インターネット一時ファイルの保存場所は Internet Explorer の場合 下記の手順で確認する事が出来る 1.[ ツール ] [ インターネットオプション ] でインターネットオプション画面のダイアログを表示させる 2.[ 全般 ] タブで [ インターネット一時ファイル ] グループの [ 設定 ] をクリックすると

More information

構造体

構造体 構造体 Byte 配列 構造体とコピーする方法 構造体とバイト配列の変換を行うには System.Runtime.InteropServices 名前空間をインポートして置くと便利で有る Imports System.Runtime.InteropServices using System.Runtime.InteropServices; 下記の 3 種類の構造体にバイト配列の値を格納した場合に付いて検証する

More information

プラグイン

プラグイン プラグイン プラグイン詳細 2 ~ プラグイン機能を持つテキストエディタの作成 ~ はじめに Adobe Photoshop や Becky! Internet Mail 等のアプリケーションでは プラグイン ( 又は アドイン エクステンション 等 ) と呼ばれるプログラムをインストールする事に依り 機能を拡張する事が出来る 此の記事では此の様なプラグイン機能を持ったアプリケーションの作り方を プラグイン対応のテキストエディタを作成する事に依り

More information

データベース1

データベース1 データベース操作プログラム Ⅲ VB20 プログラムの概要 ACCESS 等のデータベースの操作に不慣れな者でも 簡単に使用する事が出来るようなデータベースアプリケーションを目指します 今回は データグリッドをクリックする事に依り 其のレコードのフィールドデータを個別にテキストボックスやコンボボックスに表示するを付加する 此の際 カテゴリ ID や著者 ID の様に人間に解り難いデータ形式では無く

More information

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)... レコードセット (ADODB.Recordset) の使い方 作成日 : 2018/02/05 作成者 : 西村 更新履歴 更新日 更新概要 作業者 2018/02/05 新規作成 西村 1 目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst,

More information

プログラミング基礎I(再)

プログラミング基礎I(再) 山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全

More information

いまさら聞けないVB2008 ADO.NET超入門

いまさら聞けないVB2008 ADO.NET超入門 自己紹介 Z80 アセンブラ 6809 アセンブラ F-BASIC N88-BASIC FORTRAN 77 COBOL LISP Turbo Pascal Prolog KABA C 言語 M シリーズ アセンブラ PL/I VB3.0~ PL/SQL T-SQL VB2005/2008 index 接続 データ取得 データ更新 権限 ADO.NET の基本的な構造.NET データプロバイダ Parameter

More information

正規表現詳細

正規表現詳細 正規表現 正規表現言語要素.NET Framework SDK には 包括的な正規表現ツールのセットが用意されて居り 其のツールを使用する事で文字列の作成 比較 修正を効率的に行う 亦 大量のテキストやデータを素早く解析し テキストパターンの検索 削除 置換を行う事が出来る 此処では 正規表現を定義する一連の文字 演算子 及び 構成体に付いて説明する 置換.NET Framework 2 置換構成体は

More information

With sqlda sqlda に SelectCommand を追加.SelectCommand = New MySqlCommand() With.SelectCommand.CommandType = CommandType.Text.CommandText = "select * from

With sqlda sqlda に SelectCommand を追加.SelectCommand = New MySqlCommand() With.SelectCommand.CommandType = CommandType.Text.CommandText = select * from Imports MySql.Data.MySqlClient Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Label3.Text = "MySQL のデータ表示と更新のテストを行います メニューから行いたい処理を選択して実行してください

More information

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスがインスタンス化されてからメソッドに成る ) # 関数 def test_func(): print('call test_func') #

More information

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10 PASSEXAM http://www.passexam.jp Exam : 70-461J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10 1. あなたが ContosoDb 付きの Microsoft SQL Server 2012 のデータベースを管理します 展示に示すように テーブルが定義されています ( 図表ボタンをクリックします

More information

ITdumpsFree Get free valid exam dumps and pass your exam test with confidence

ITdumpsFree   Get free valid exam dumps and pass your exam test with confidence ITdumpsFree http://www.itdumpsfree.com Get free valid exam dumps and pass your exam test with confidence Exam : C9530-001J Title : IBM Integration Bus v10.0, Solution Development Vendor : IBM Version :

More information

Userコントロール

Userコントロール User コントロール 初めてのユーザーコントロールの作成 作成したクラスは他のプログラムで再利用出来る為 同じコードを何度も繰り返し作成する必要が無い コントロールも 複数のプロジェクトで再利用出来るクラスで有る 同じユーザーインターフェイスを何度も繰り返してデザインすると謂う経験は 恐らく誰でも有る 例えば 姓と名を入力する為の TextBox コントロールを追加した後で 両方を組み合わせてフルネームを作成するコードを追加する等の作業で有る

More information

グラフィックス

グラフィックス グラフィックス PictureBox の Image プロパティに関する良く有る勘違い PictureBox に画像を表示する方法と仕て PictureBox の Image プロパティを使う方法と Graphics の DrawImage メソッドを使う方法が有るが 此の 2 つの方法を混同し 正しく理解して居ない事が多い様で有る 例えば 下記に列挙する様な状況が 此れに該当する 1.PictureBox

More information

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部 はじめに コース概要と目的 Oracle 独自の手続き型言語である PL/SQL について説明します PL/SQL の基本構文 ストアド サブプログラム トリガーの作成方法 またストアド サブプログラムの管理について習得することを目的としています 受講対象者 これから PL/SQL を使用してアプリケーション開発をされる方 前提条件 SQL トレーニング コースを受講された方 もしくは 同等の知識をお持ちの方

More information

VB実用Ⅲ⑩ フリーデータベースⅡ

VB実用Ⅲ⑩ フリーデータベースⅡ MySQL の利用 MySQL の ODBC(MyODBC) テキストでは MySQL Connector/ODBC(mysql-connector-odbc-3.51.14-win32.msi) をインストールした場合に付いて解説して居るが 此処では MyODBC(MyODBC-3.51.10-x86-win-32bit.msi) をインストールし myodbc-3.51.06-conv_ujis.zip

More information

ListViewコントロール

ListViewコントロール ListView コントロール ListView コントロールへ項目を追加 本稿では.NET Framework の標準コントロールで有る ListView コントロール (System.Windows.Forms 名前空間 ) を活用する為に ListView コントロールにデータを追加する方法を紹介する ListView コントロールは データ項目をアイコン表示や詳細表示等に依り一覧表示する為の物で

More information

Seasar.NET入門

Seasar.NET入門 2007 Spring Seasar.NET 入門 2007.5.27 Seasar.NET 杉本和也 2007 Spring Copyright 2004-2007 The Seasar Foundation and the others. All rights reserved. 1 杉本和也と申します 高知県の株式会社アイビスに勤務しています プログラミング歴 6 年 オープンソース歴 2 年

More information

ADOとADO.NET

ADOとADO.NET ADO と ADO.NET Visual Basic.NET では 従来の ADO を従来の方法で使用する事も出来るが 通常 データベースにアクセスする為に ADO.NET を使用する 此処では Windows 上で動作するアプリケーションの開発に必要な知識を中心に ADO と ADO.NET の差異を説明する Visual Basic 6.0 では データベースにアクセスする為に ADO(ActiveX

More information

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版   Copyright 2018 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 2.1. 本書の目的 2.2. 対象読者 2.3. サンプルコードについて 2.4. 本書の構成 3. 辞書項目 API 3.1. 最新バージョン 3.1.1. 最新バージョンの辞書を取得する 3.2. 辞書項目 3.2.1. 辞書項目を取得する 3.2.2.

More information

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~ .NET プログラマー早期育成ドリル VB 編 付録文法早見表 本資料は UUM01W:.NET プログラマー早期育成ドリル VB 編コードリーディング もしくは UUM02W:.NET プログラマー早期育成ドリル VB 編コードライティング を ご購入頂いた方にのみ提供される資料です 資料内容の転載はご遠慮下さい VB プログラミング文法早見表 < 基本文法 > 名前空間の定義 Namespace

More information

Javaプログラムの実行手順

Javaプログラムの実行手順 戻り値のあるメソッド メソッドには 処理に使用する値を引数として渡すことができました 呼び出し 側からメソッドに値を渡すだけでなく 逆にメソッドで処理を行った結果の値を 呼び出し側で受け取ることもできます メソッドから戻してもらう値のことを もどりち戻り値といいます ( 図 5-4) 図 5-4. 戻り値を返すメソッドのイメージ 戻り値を受け取ることによって ある計算を行った結果や 処理に成功したか失

More information

VB実用① データベースⅠ

VB実用① データベースⅠ VB でデータベース Ⅰ VB 2005 1 プログラムの概要 データベースプログラムを手軽に作成する方法と仕ては Access のフォーム機能を用いる事が 先ず考えられる ウィザードも充実して居り 操作を覚えれば簡単に作成する事が出来る 其れでは VB でデータベースプログラムを作るメリットは何かと謂えば先ず Access のフォーム機能に比べ コントロールが充実して居り より自由なデザインが可能と謂う事と

More information

Microsoft Word - JDBC検証 docx

Microsoft Word - JDBC検証 docx ASTERIA WARP 4.9/1610 でのサードパーティ製 JDBC ドライバ動作検証報告書 2016 年 12 インフォテリア株式会社 本書は著作権法により保護されています インフォテリア株式会社による事前の許可無く 本書のいかなる部分も無断転載 複製 複写を禁じます 本書の内容は予告無しに変更する事があります Infoteria インフォテリア ASTERIA WARP はインフォテリア株式会社の商標です

More information

Oracle Lite Tutorial

Oracle Lite Tutorial GrapeCity -.NET with GrapeCity - InputMan Creation Date: Nov. 30, 2005 Last Update: Nov. 30, 2005 Version: 1.0 GrapeCity Microsoft Visual Studio.NET VB.NET Oracle Tips InputMan InputMan Oracle.NET Oracle

More information

Oracle Lite Tutorial

Oracle Lite Tutorial GrapeCity -.NET with GrapeCity - FlexGrid Creation Date: Nov. 30, 2005 Last Update: Nov. 30, 2005 Version: 1.0 Document Control Internal Use Only Author Hiroshi Ota Change Logs Date Author Version Change

More information

MVP for VB が語る C# 入門

MVP for VB が語る C# 入門 MVP for VB が語る C# 入門 2008.08.09 初音玲 自己紹介 Z80 アセンブラ 6809 アセンブラ F-BASIC N88-BASIC FORTRAN 77 COBOL LISP Turbo Pascal Prolog KABA C 言語 M シリーズ アセンブラ PL/I VB3.0~ PL/SQL T-SQL VB2005/2008 index Microsoft Visual

More information

データベースアクセス

データベースアクセス データベースアクセスコンポーネント 1. 概要 データベースアクセスコンポーネントとは SQL データベースにアクセスして SQL 文を実行することによりデータベース検索を行う機能を提供するコンポーネントです また データベースアクセスコンポーネントでは データベースの構成情報 接続情報 エラー情報等を取得することも可能です データベースアクセスコンポーネントは アプリケーションビルダーのメニューから以下のように選びます

More information

構造体

構造体 構造体 構造体を取り扱うには System.Runtime.InteropServices 名前空間をインポートして置くと便利で有る Imports System.Runtime.InteropServices using System.Runtime.InteropServices; C# ユーザー定義型 (Type) と構造体 (Structure) 6.0 のユーザー定義型 (Type) を.NET

More information

テスト 1/7 ページ プレポスト Visual Studio による Windows アプリの開発 ( 基礎編 ) 受講日程受講番号氏名 1.NET Framework に関する記述で 誤っているものを選びなさい 1..NET Framework に含まれる CLR は プログラミング言語に依存し

テスト 1/7 ページ プレポスト Visual Studio による Windows アプリの開発 ( 基礎編 ) 受講日程受講番号氏名 1.NET Framework に関する記述で 誤っているものを選びなさい 1..NET Framework に含まれる CLR は プログラミング言語に依存し 1/7 ページ プレポスト Visual Studio による Windows アプリの開発 ( 基礎編 ) 受講日程受講番号氏名 1.NET Framework に関する記述で 誤っているものを選びなさい 1..NET Framework に含まれる CLR は プログラミング言語に依存しない中間言語を実行するための環境である 2..NET Framework に含まれる.NET Framework

More information

DumpCollection IT Exam Training online / Bootcamp PDF and Testing Engine, study and practice

DumpCollection IT Exam Training online / Bootcamp   PDF and Testing Engine, study and practice DumpCollection IT Exam Training online / Bootcamp http://www.dumpcollection.com PDF and Testing Engine, study and practice Exam : 1z0-144 日本語 (JPN) Title : Oracle Database 11g: Program with PL/SQL Vendor

More information

0 第 4 書データベース操作 i 4.1 データベースへの接続 (1) データベースチェックポイントの追加 データベースチェックポイントを追加します (2)ODBC による接続 ODBC を使用してデータベースへ接続します SQL 文を手作業で指定する場合 最大フェッチ行数を指定する場合はここで最大行数を指定します ii 接続文字列を作成します 作成ボタンクリック > データソース選択 > データベース接続

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 独習 Java ( 第 3 版 ) 6.7 変数の修飾子 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 Object クラスと Class クラス 6.7 変数の修飾子 (1/3) 変数宣言の直前に指定できる修飾子 全部で 7 種類ある キーワード final private protected public static transient volatile 意味定数として使える変数同じクラスのコードからしかアクセスできない変数サブクラスまたは同じパッケージ内のコードからしかアクセスできない変数他のクラスからアクセスできる変数インスタンス変数ではない変数クラスの永続的な状態の一部ではない変数不意に値が変更されることがある変数

More information

PowerPoint Presentation

PowerPoint Presentation UiPath 女性ユーザー コミュニティ第 1 回 Meetup 2018.9.12 (WED) 女性ユーザーコミュニティ概要 目的 : まだまだ男性と比べると数が少ない UiPath を使ってる女性ユーザーに対し 勉強 意見交換ができる場を提供し 女性ユーザーをさらに増やします 対象 : 仕事で UiPath を使っている これから使う予定の女性の方 コミュニティ内容 : 勉強会 交流会の実施 デベロッパーコミュニティと何が違うの?

More information

MISAO with WPF

MISAO with WPF System.AddIn を利用した アプリケーション拡張 - アドインの開発 - JZ5( 松江祐輔 )@ わんくま http://katamari.jp http://katamari.wankuma.com 2008/9/13 What s System.AddIn System.AddIn 名前空間 Visual Studio Orcus から利用可能 アプリケーションに拡張機能を提 供 なんかいろいろ特長が?

More information

PowerPoint Presentation

PowerPoint Presentation 上級プログラミング 2( 第 5 回 ) 工学部情報工学科 木村昌臣 今日のテーマ データベース入門 データベースシステムの用意の仕方 データベースを作ってみる データベースを使ってみる データベースプログラミング JDBCを使った検索プログラム JDBCを使った更新プログラム データベース入門 今回の説明は Windows 環境を前提としているため Linux など他のプラットフォーム上で作業を行う場合は

More information

VB6互換のファイルの処理

VB6互換のファイルの処理 Visual Basic のランタイム関数を使用したファイルアクセス FileOpen 関数 ファイルを開いて入出力を行う FileOpen(FileNumber, FileName, Mode[, Access[, Share[, RecorLength]]]) 引数 FileNumber は必ず指定する 有効なファイル番号を指定する FreeFile 関数を使用して 使用可能な次のファイル番号を取得する事が出来る

More information

FormPat インポート設定ガイド

FormPat インポート設定ガイド FormPat 7 インポート設定ガイド 2019/07/12 Copyright(C) 2019 Digital Assist Corporation. All rights reserved. 1 / 11 目次 目次... 2 はじめに... 3 データベースおよびテーブルの作成... 4 インポート定義ファイルの作成... 5 インポート定義ファイルの見出し行... 5 インポート定義ファイルの明細行...

More information

データベース1

データベース1 データベース操作プログラム Ⅱ VB9 プログラムの概要 オブジェクト型の変数宣言を行い コード上で データベースに接続し SQL を発行する 今回は オブジェクト型の変数宣言に依り データベースと接続する為のオブジェクト 及び 検索文を発行した際にデータを格納するオブジェクトを コード上で生成してデータベースに接続し 各レコードのフィールド情報を取得して 其れをコンボボックスの項目に追加する 此れに依り

More information

Microsoft Word _VBAProg1.docx

Microsoft Word _VBAProg1.docx 1. VBA とマクロ 1.1 VBA とは VBA(Visual Basic for Applications) は 1997 年に Microsoft 社がマクロを作成するために開発された言語である Windows 対応のアプリケーションを開発するためのプログラミング言語 Visual Basic をもとにしているため 次のような特徴がある 1 VBA は Excel Word, Access,

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double

More information

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ 第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイルの作成方法 コンパイル方法について説明します IDL ファイルの作成にあたっては INTERSTAGE

More information

(OnePoint) ( URL Web Copyright 2005 Microsoft Corporation. All rights reserved. MicrosoftWindowsVisual Basic Visual Studio Microsoft Corporation

(OnePoint) ( URL Web Copyright 2005 Microsoft Corporation. All rights reserved. MicrosoftWindowsVisual Basic Visual Studio Microsoft Corporation Microsoft Microsoft Visual Basic.NET (OnePoint) ( URL Web Copyright 2005 Microsoft Corporation. All rights reserved. MicrosoftWindowsVisual Basic Visual Studio Microsoft Corporation Microsoft Microsoft

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プロシージャ プロシージャの種類 Subプロシージャ Functionプロシージャ Propertyプロシージャ Sub プロシージャ Subステートメント~ステートメントで囲まれる 実行はするけど 値は返さない 途中で抜けたいときは Exit Sub を行なう Public Sub はマクロの実行候補に表示される Sub プロシージャの例 Public Sub TestSubProc() Call

More information

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るので 此れを利用して音声認識を行うサンプルを紹介する 下記の様な Windows フォームアプリケーションを作成する エディタを起動すると

More information

データベース1

データベース1 データベース操作プログラム Ⅰ VB8 プログラムの概要 データベースプログラムを手軽に作成する方法としては Access のフォーム機能を用いる事が 先ず考えられます ウィザードも充実しており 操作を覚えれば簡単に作成する事が出来ます 其れでは VB でデータベースプログラムを作るメリットは何んでしょうか 1 つは Access のフォーム機能に比べ コントロールが充実している事 より自由なデザインが可能です

More information

Microsoft PowerPoint pptx

Microsoft PowerPoint pptx データベース 第 11 回 (2009 年 11 月 27 日 ) テーブル結合と集計 ( 演習 ) 第 11 回のテーマ 前回より シラバスから離れ 進捗状況に合わせて全体構成を変更しています テーマ1: テーブルの結合 テーマ 2: 結合した結果からの様々な検索 テーマ3: 集計の方法 今日学ぶべきことがら Select 文のさまざまな表現 Natural join sum(*) orrder

More information

基礎計算機演習 実習課題No6

基礎計算機演習 実習課題No6 実習課題 No.6 課題は 3 題ある. 課題 6-1 時間内提出 次の実行例のように, 名簿を出力するプログラムをつくりたい. このプログラムでは, まず人数をたずね, 次にその人数分の名前を入力し, それを再びコンソールに出力する. なお, 空の名前が入力されても終了せずにその欄は空欄で出力するものとする. 注意とヒント この課題では,string 型の配列をまず宣言する. このとき, 配列の要素はちょうど名簿に入力する人数分だけを宣言すること

More information

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版   Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. IM- 共通マスタの拡張について 2.1. 前提となる知識 2.1.1. Plugin Manager 2.2. 表記について 3. 汎用検索画面の拡張 3.1. 動作の概要 3.1.1. 汎用検索画面タブの動作概要 3.2. 実装の詳細 3.2.1. 汎用検索画面タブの実装

More information

- i - org.t_engine.tenet.core.coreerrormessageexception org.t_engine.tenet.core Class CoreErrorMessageException java.lang.object +-java.lang.throwable +-java.lang.exception +-org.t_engine.tenet.core.coreexception

More information

Android Layout SDK プログラミング マニュアル

Android Layout SDK プログラミング マニュアル プログラミングマニュアル Version 1.3.0 用 更新履歴 年月日 バージョン 履歴 2014.09.08 1.2.0.0 新規 (Layout Utilities ユーザーズ ガイド ) 2016.08.16 1.3.0.0 モバイル端末用レイアウトで直線部品と矩形部品に対応 モバイル端末用レイアウトファイルを CLFX から XML へ変更 Layout Print Engine から

More information

NotifyIconコントロール

NotifyIconコントロール NotifyIcon コントロール システムトレイ ( タスクトレイ ) にアイコンを表示する.NET Framework 2.0 以降の場合は 後述の 2 を観て欲しい Outlook や MSN Messenger 等の様に Windows アプリケーションではシステムトレイ ( タスクトレイ ステータス領域等とも呼ばれる ) にアイコンを表示して アプリケーションの状態を示したり アプリケーションのフォームを表示したりする為のショートカットとして利用する事が出来る.NET

More information

データベースⅠ

データベースⅠ データベース操作プログラム Ⅰ VB 2005 8 プログラムの概要 データベースプログラムを手軽に作成する方法としては Access のフォーム機能を用いる事が 先ず考えられます ウィザードも充実しており 操作を覚えれば簡単に作成する事が出来ます 其れでは VB でデータベースプログラムを作るメリットは何んでしょうか 1 つは Access のフォーム機能に比べ コントロールが充実している事 より自由なデザインが可能です

More information

VB実用⑦ エクセル操作Ⅰ

VB実用⑦ エクセル操作Ⅰ VB でエクセル操作 Ⅰ VB 2005 7 プログラムの概要 事務処理に於いて Microsoft 社のスプレッドシートソフトで有るエクセルは データベースソフトで有るアクセスと共に 業界標準 (De Facto Standard) で有ると謂う事が出来る 此処では 其のエクセルを Visual Basic から操作する方法を 重点的に学ぶ 今回は Visual Basic でエクセルを利用する基本と成るオブジェクト生成と

More information

PowerPoint Presentation

PowerPoint Presentation Webデザイン特別プログラムデータベース実習編 3 MySQL 演習, phpmyadmin 静岡理工科大学総合情報学部幸谷智紀 http://na-inet.jp/ RDB の基礎の基礎 RDB(Relational DataBase) はデータを集合として扱う データの取り扱いはテーブル (= 集合 ) の演算 ( 和集合, 積集合 ) と同じ データベースには複数のテーブルを作ることができる

More information

Microsoft PowerPoint - db03-5.ppt

Microsoft PowerPoint - db03-5.ppt データベース言語 SQL リレーショナルデータモデルにおけるデータ操作言語 : リレーショナル代数 少なくともリレーショナル代数と同等のデータ検索能力をもつときリレーショナル完備という. リレーショナル代数はユーザフレンドリではない. 自然な英文による質問の表現が必要になる. リレーショナルデータベース言語 SQL 英文による簡単な構文 リレーショナル代数でできない, 合計, 平均, 最大などの計算機能の組み込み.

More information

ファイル監視

ファイル監視 ファイル操作 ファイルやディレクトリの監視 FileSystemWatcher クラス.NET Framework のクラスライブラリには ファイルやディレクトリの作成 変更 削除を監視する為の FileSystemWatcher クラスが System.IO 名前空間に用意されて居る ( 但し Windows 98/Me では利用出来ない ) 此れを利用すると 特定のディレクトリにファイルが作成された

More information

Microsoft Office操作(EXCEL)

Microsoft Office操作(EXCEL) VB から Excel にデータを転送する方法 概要 此の資料では Microsoft Visual Basic アプリケーションから Microsoft Excel にデータを転送する様々な方法に付いて説明する 亦 最適なソリューションの選択に役立つ様に 夫々れの方法の長所と短所に付いても説明する 詳細 Excel ブックにデータを転送するのに最も良く使用されるのは オートメーションと呼ばれる技法で有る

More information

Oracle Database Connect 2017 JPOUG

Oracle Database Connect 2017 JPOUG Oracle Database Connect 2017 / JPOUG 異なるデータベース間の SQL 比較と Oracle Database 12c の新機能 Noriyoshi Shinoda March 8, 2017 自己紹介篠田典良 ( しのだのりよし ) 所属 日本ヒューレット パッカード株式会社テクノロジーコンサルティング事業統括 現在の業務 Oracle Database をはじめ

More information

文字列操作と正規表現

文字列操作と正規表現 文字列操作と正規表現 オブジェクト指向プログラミング特論 2018 年度只木進一 : 工学系研究科 2 文字列と文字列クラス 0 個以上の長さの文字の列 Java では String クラス 操作 文字列を作る 連結する 文字列中に文字列を探す 文字列中の文字列を置き換える 部分文字列を得る 3 String クラス 文字列を保持するクラス 文字列は定数であることに注意 比較に注意 == : オブジェクトとしての同等性

More information

XMLプログラミング(ADO編)

XMLプログラミング(ADO編) XML プログラミング ADO 2.5 と XML ADO 2.5 と XML ADO 2.5 を利用すれば 粗所有るデータソースからのデータの読み取りや ADO レコードセット ( メモリ上にデータを持つ仮想テーブルの様な物 ) へのデータの配置 XML へのデータ変換が可能に成る XML に変換したデータをデータストリームに配置すれば ファイルや ADO ASP Response オブジェクト

More information

Prog1_6th

Prog1_6th 2019 年 10 月 31 日 ( 木 ) 実施配列同種のデータ型を有する複数のデータ ( 要素 ) を番号付けして, ひとまとまりの対象として扱うものを配列と呼ぶ 要素 point[0] point[1] point[2] point[3] point[4] 配列 配列の取り扱いに関して, 次のような特徴がある 1. プログラム中で用いる配列変数 ( 配列の本体を参照する参照型の変数 ) は必ず宣言しておく

More information

スライド 1

スライド 1 XML with SQLServer ~let's take fun when you can do it~ Presented by 夏椰 ( 今川美保 ) Agenda( その 1) XML XML XSLT XPath XML Schema XQuery Agenda( その 2) SQLServer における XML XML 型 XML Schema XQuery & XPath チェック制約

More information

Oracle Lite Tutorial

Oracle Lite Tutorial GrapeCity -.NET with GrapeCity - SPREAD Creation Date: Nov. 30, 2005 Last Update: Nov. 30, 2005 Version: 1.0 Document Control Internal Use Only Author Hiroshi Ota Change Logs Date Author Version Change

More information

intra-mart Accel Platform

intra-mart Accel Platform intra-mart Accel Platform IM- 共通マスタスマートフォン拡張プログラミングガイド 2012/10/01 初版 変更年月日 2012/10/01 初版 > 変更内容 目次 > 1 IM- 共通マスタの拡張について...2 1.1 前提となる知識...2 1.1.1 Plugin Manager...2 1.2 表記について...2 2 汎用検索画面の拡張...3

More information

Caché SQL に関するよくある質問

Caché SQL に関するよくある質問 Caché SQL に関するよく ある質問 Version 5.1 2006-03-14 InterSystems Corporation 1 Memorial Drive Cambridge MA 02142 www.intersystems.com Caché SQL に関するよくある質問 Caché Version 5.1 2006-03-14 Copyright 2006 InterSystems

More information

プレポスト【問題】

プレポスト【問題】 コース名 : 基礎から学ぶ!Excel VBA による業務の自動化 受講日 氏名 1 Excel VBA を使用するメリットとして誤っているものを 1 つ選びなさい 1. 手作業では手間のかかる作業も プログラムに記述した処理は一括して実行されるため 何段階ものメニュー操作を行う必要がなくなる 2. プログラムに書いた処理は記述どおりに実行されるため だれがいつ何回行っても確実な処理がなされ 誤動作を防ぐことができる

More information

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - lec10.ppt 今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ

More information

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String 目次 1.SqlCtl クラスリファレンス 2 (1)Connect() メソッド 2 (2)DisConnect() メソッド 3 (3)Commit() メソッド 3 (4)Rollback() メソッド 4 2.SqlStm クラスリファレンス 5 (1)Prepare() メソッド 5 (2)Execute() メソッド 6 (3)Release() メソッド 6 (4)Immediate()

More information

Visual Basic Oracle Database 11 Release 1

Visual Basic Oracle Database 11 Release 1 Visual Basic 2008 + Oracle Database 11 Release 1 2008.01.26 初音玲 Part.1 Oracle Database 製品について Oracleクライアントコンポーネントについて ODP.NETについて OracleConnectionクラスについて Oracle Database 製品について Oracleクライアントコンポーネントについて

More information

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

More information