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

データアダプタ概要

N/A
N/A
Protected

Academic year: 2021

シェア "データアダプタ概要"

Copied!
6
0
0

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

全文

(1)

■ TableAdapter クエリを実行する方法 ■

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

TableAdapter クエリは、データテーブルに値を設定したり(Fill クエリと FillBy クエリ)、クエリが返 すデータを読み込んだ新しいデータテーブルを返す事が出来る(GetData クエリと GetDataBy クエリ)。 TableAdapter クエリの構成ウィザードを実行すると、クエリを既存の TableAdapter に追加出来る。 ■ TableAdapter のインスタンスの作成 TableAdapter のメソッドを呼び出す前に、TableAdapter のインスタンスを作成する必要が有る。 ※ TableAdapter はデータセットデザイナを使用して作成・編集するが、TableAdapter は、実際には データセット内で入れ子に成ったクラスでは無い。TableAdapter は、TableAdapter に関連付けら れ、データセット名に基づいて指定された名前空間に有る。名前付け規則は、DataSetName + "TableAdapters" で有る。例えば、NorthwindDataSet に関連付けられた総ての TableAdapter は NorthwindDataSetTableAdapters 名前空間に有る。CustomersTableAdapter が有るとすると、其 の完全修飾名は、NorthwindDataSetTableAdapters.CustomersTableAdapter に成る。 TableAdapter のインスタンスを作成するには [データソース] ウィンドウから項目を Windows アプリケーションのフォームにドラッグすると、フォ ームにTableAdapter のインスタンスが自動的に作成される。フォームの下部の境界の下の小さな領域 に有るコンポーネントトレーのTableAdapter を調べて、インスタンスの名前を確認する。 又は TableAdapter を作成した後にプロジェクトを構築する。TableAdapter がツールボックスに表示される。 ツールボックスからTableAdapter をフォームにドラッグしてインスタンスを作成する。コンポーネン トトレーのTableAdapter を調べて、インスタンスの名前を確認する。 又は TableAdapter のインスタンスをプログラムに依り作成する。 Visual Basic

Dim CustomersTableAdapter1 As NorthwindDataSetTableAdapters.CustomersTableAdapter CustomersTableAdapter1 = New NorthwindDataSetTableAdapters.CustomersTableAdapter()

C#

NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter1;

customersTableAdapter1 = new NorthwindDataSetTableAdapters.CustomersTableAdapter();

(2)

■ 既存のデータテーブルにデータを読み込む TableAdapter クエリの実行(Fill のメソッド) 既存のデータテーブルにデータを読み込むTableAdapter クエリを実行するには

TableAdapter の Fill クエリや FillBy クエリを呼び出し、データを読み込むデータテーブルを渡す。例 えば、次のコードはFill クエリを実行して Customers テーブルにデータを読み込む。 Visual Basic CustomersTableAdapter1.Fill(NorthwindDataSet1.Customers) C# customersTableAdapter1.Fill(northwindDataSet1.Customers); ■ 新しいデータテーブルを返す TableAdapter クエリの実行(GetData のメソッド) 新しいデータテーブルを返すTableAdapter クエリを実行するには

TableAdapter の GetData クエリや GetDataBy クエリを呼び出し、クエリの結果が格納され、型指定 されたデータテーブルを返す。例えば、次のコードはGetData クエリを実行して Customers テーブル を返す。

Visual Basic

Dim newCustomersTable As NorthwindDataSet.CustomersDataTable newCustomersTable = CustomersTableAdapter1.GetData( ) C# NorthwindDataSet.CustomersDataTable newCustomersTable; newCustomersTable = customersTableAdapter1.GetData( ); ■ 単一(スカラ)値を返す TableAdapter クエリの実行 ツールボックスから直接データセットデザイナにクエリをドラッグして、スタンドアロンクエリ(デー タテーブルを使用しないクエリ)を作成出来る。 単一(スカラ)値を返すTableAdapter クエリを実行するには TableAdapter のインスタンスを作成し、戻り値を保持する変数を宣言し、クエリの結果を代入する。 次の例は、QueriesTableAdapter に対する CustomerCount と謂うクエリが有ると仮定して居る。 Visual Basic

Dim scalarQueriesTableAdapter As NorthwindDataSetTableAdapters.QueriesTableAdapter scalarQueriesTableAdapter = New NorthwindDataSetTableAdapters.QueriesTableAdapter( ) Dim returnValue As Integer

returnValue = CType(scalarQueriesTableAdapter.CustomerCount( ), Integer) C#

NorthwindDataSetTableAdapters.QueriesTableAdapter scalarQueriesTableAdapter;

scalarQueriesTableAdapter = new NorthwindDataSetTableAdapters.QueriesTableAdapter( ); int returnValue;

(3)

■ TableAdapter で直接データベースにアクセスする ■ InsertCommand、UpdateCommand、及び、DeleteCommand に加えて、データベースに対して直接 実行 出来るメ ソッドで、TableAdapter が生成される。此等のメソッド(TableAdapter.Insert、 TableAdapter.Update、及び、TableAdapter.Delete)は、データベース内でデータを操作する為に直接 呼び出す事が出来る。 此 等 の 直 接 メ ソ ッ ド を 作 成 し な い 場 合 は 、[ プ ロ パ テ ィ ] ウ ィ ン ド ウ で TableAdapter の GenerateDbDirectMethods プロパティを false に設定する。メインクエリに加えて TableAdapter に追 加されたクエリは、スタンドアロンのクエリで有る。詰まり、DbDirect メソッドを生成しないクエリ で有る。 ■ データベースへのコマンドの直接送信 目的とするタスクを実行するTableAdapter DbDirect メソッドを呼び出す。 新規レコードをデータベースに直接挿入するには 各列の値をパラメータと仕て渡してTableAdapter の Insert メソッドを呼び出す。次の手順では、例と 仕てNorthwind データベースの Region テーブルを使用する。 ※ 使用出来るインスタンスが無い場合は、使用する TableAdapter をインスタンス化する。 Visual Basic

Dim regionTableAdapter As New NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter.Insert(5, "NorthWestern") C# NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter = new NorthwindDataSetTableAdapters.RegionTableAdapter( ); regionTableAdapter.Insert(5, "NorthWestern"); データベース内のレコードを直接更新するには 各列の新しい値と元の値をパラメータと仕て渡してTableAdapter の Update メソッドを呼び出す。 ※ 使用出来るインスタンスが無い場合は、使用する TableAdapter をインスタンス化する。 Visual Basic

Dim regionTableAdapter As New NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter.Update(1, "East", 1, "Eastern")

C#

NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter = new NorthwindDataSetTableAdapters.RegionTableAdapter( );

regionTableAdapter.Update(1, "East", 1, "Eastern"); データベース内のレコードを直接削除するには

各列の値をDelete メソッドのパラメータと仕て渡して TableAdapter の Delete メソッドを呼び出す。 此の例では、Northwind データベースの Region テーブルを使用する。

(4)

Visual Basic

Dim regionTableAdapter As New NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter.Delete(5, "NorthWestern") C# NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter = new NorthwindDataSetTableAdapters.RegionTableAdapter( ); regionTableAdapter.Delete(5, "NorthWestern"); ■ サンプルコード Visual Basic Public Class Form1

' コントロールボックスを FALSE にプロパティーで設定

' Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog

Private Ds As New SampleDataSet

Private Ta As New SampleDataSetTableAdapters.t_顧客 TableAdapter Private tb As New SampleDataSet.t_顧客 DataTable

' Private TableBind As New BindingSource

Private Sub Button4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click ' 検索 Form2.code = Me.TextBox1.Text Trace.WriteLine(Form2.F_GetMyDataset( )) Form2.ShowDialog( )

If Form2.SelectBol = True Then Me.TextBox1.Text = Form2.code ' DB を検索して値を表示する Ta.SelectIDFillBy(Ds.t_顧客, Convert.ToInt32(Me.TextBox1.Text)) ' 抽出 Me.TextBox1.Text = Ds.t_顧客(0).ID.ToString( ) Me.TextBox2.Text = Ds.t_顧客(0).NAME.ToString( ) Ds.Dispose( ) Ta.Dispose( ) End If Form2.Dispose( ) End Sub

Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click ' 終了する必要が有る総てのメッセージポンプを通知し、

' メッセージが処理されると、総てのアプリケーションウィンドウを閉じる Application.Exit( )

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click

Try ' 保存

(5)

Ta.SelectIDFillBy(Ds.t_顧客, Convert.ToInt32(Me.TextBox1.Text)) '抽出 ' Ds.t_顧客(0).ID = Me.TextBox1.Text ' Ds.t_顧客(0).BeginEdit( ) Ds.t_顧客(0).NAME = Me.TextBox2.Text Debug.Print(Ds.t_顧客(0).NAME) ' Ds.t_顧客(0).EndEdit( ) ' Ds.t_顧客.AcceptChanges( ) ' 編集された行を取得する tb = CType(Ds.t_顧客.GetChanges(DataRowState.Modified), _ SampleDataSet.t_顧客 DataTable)

' Using tx As New Transactions.TransactionScope( ) ' セッション参加登録 ' 此の名前空間を使ったアプリケーション作成は、Windows 2000、Windows XP、 ' Windows 2003 の各プラットフォームで而巳サポートされる。 ' Windows 98 や Windows ME のプラットフォームでトランザクションを作成すると、 ' PlatformNotSupportedException がスローされる(Jet4.0 でも利用出来ない?)。 Ta.Update(tb) ' tx.Complete( ) ' End Using Catch ex As Exception

MessageBox.Show(ex.ToString, "保存", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Ds.Dispose( ) Ta.Dispose( ) End Sub End Class ' ======================================================================================= Public Class Form2

' コントロールボックスは False にする

Friend code As String Friend SelectBol As Boolean

Private Ds As New SampleDataSet

Private Ta As New SampleDataSetTableAdapters.t_顧客 TableAdapter ' Private tableKokyaku As New SampleDataSet.t_顧客 DataTable ' Private TableBind As New BindingSource

Friend Function F_GetMyDataset( ) As Boolean

' DB に接続してデータセットを取得(データが無ければ False を返す) If code = "" Then Ta.Fill(Ds.t_顧客) Else Ta.SelectIDFillBy(Ds.t_顧客, Convert.ToInt32(code)) End If ' TableBind.DataSource = Ds

(6)

' TableBind.DataMember = "t_顧客" DataGridView1.DataSource = Ds DataGridView1.DataMember = "t_顧客" End Function

Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click

SelectBol = False ' 選択して居ない Me.Close( ) ' フォームを閉じる

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click If Me.TextBox1.Text = "" Then Ta.Fill(Ds.t_顧客) ' 総て持って来る Else Ta.SelectIDFillBy(Ds.t_顧客, Convert.ToInt32(Me.TextBox1.Text)) '抽出 ' Ta.FillBy(Ds.t_顧客) End If ' TableBind.DataSource = Ds ' TableBind.DataMember = "t_顧客" ' データグリッドビューに表示 DataGridView1.DataSource = Ds DataGridView1.DataMember = "t_顧客" Ds.Dispose( ) Ta.Dispose( ) ' DataGridView1.Columns(1).Visible = False End Sub

Private Sub DataGridView1_DoubleClick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles DataGridView1.DoubleClick ' 選択したら

Call DgSelect( ) End Sub

Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Call DgSelect( )

End Sub

Private Sub DgSelect( )

If DataGridView1.SelectedRows.Count > 0 Then Debug.Print(DataGridView1.SelectedRows(0).Cells(0).Value.ToString( )) code = DataGridView1.SelectedRows(0).Cells(0).Value.ToString( ) SelectBol = True ' 選択した Me.Close( ) ' フォームを閉じる End If End Sub End Class

参照

関連したドキュメント

ピッチは60mm~80mmで設計され ているが,本研究では取り付けピッ チを100mmに設定し,補助ノズル噴

「臨床推論」 という日本語の定義として確立し

l 「指定したスキャン速度以下でデータを要求」 : このモード では、 最大スキャン速度として設定されている値を指 定します。 有効な範囲は 10 から 99999990

機能名 機能 表示 設定値. トランスポーズ

パスワード 設定変更時にパスワードを要求するよう設定する 設定なし 電波時計 電波受信ユニットを取り外したときの動作を設定する 通常

(1)

出来形の測定が,必要な測 定項目について所定の測 定基準に基づき行われて おり,測定値が規格値を満 足し,そのばらつきが規格 値の概ね

2021年9月以降受験のTOEFL iBTまたはIELTS(Academicモジュール)にて希望大学の要件を 満たしていること。ただし、協定校が要件を設定していない場合はTOEFL