0

ADO.Netで厳密に型指定されたデータセットを構築しようとしていますが、TableAdaptersの1つの側面で少し問題が発生しています。

私のクエリは次のようになります

SELECT *
FROM testdict.ModuleVariable
WHERE Module = ?

私の問題はtestdictの部分を中心に展開しています。データにアクセスするためにいくつかの異なるスキーマを使用します(多重化されたSybase IQインスタンスのため)。このクエリのスキーマ部分をパラメータ化するにはどうすればよいですか?

私はもう試した:

SELECT *
FROM ?.ModuleVariable
WHERE Module = ?

しかし、役に立たない。私の現在の考え方は、TableAdapterを継承し、スキーマを手動でパラメーター化する必要があるかもしれないというものですが、より良い解決策があることを望んでいます。

前もって感謝します

4

2 に答える 2

1

まず第一に、選択クエリを追加するだけでは、設計時にこれを実現することはできません。スキーマをパラメーター化することはできません。

ただし、これには解決策があります。これを行う方法は次のとおりです。

1.)テーブルをtyped-dataset Designerにドラッグアンドドロップします。これにより、テーブルのtyped-data-tableと、データベーステーブルにアクセスするためのtable-adapterが作成されます。テーブルアダプタは、データテーブルのスキーマを認識しています。

2.)次に、 2つの引数を取るストアドプロシージャをデータベースに作成します。1つはテーブル[?.ModuleVariable]のスキーマであり、もう1つはwhere句、または基準として必要な任意のものです。必要に応じて、これのオーバーロードを作成できます。このストアドプロシージャは、引数に基づいてSQLクエリを作成し、データベースで実行します。これにより、結果セットが呼び出し元のtable-adapterに返されます

3.)デザインビューからストアドプロシージャから結果をフェッチするメソッドをテーブルアダプタに追加します。結果のスキーマが、関連するデータテーブルのスキーマと正確に一致していることを確認してください

4.)これで、コードからテーブルアダプタのインスタンスを作成し、メソッドを呼び出すことができます。メソッドは、ストアドプロシージャを呼び出し、結果が入力されたデータテーブルを返します

楽しむ!

于 2009-12-25T10:51:16.150 に答える
1

テーブルアダプタは部分クラスとして定義されているため、オーバーロードしたり、テーブルアダプタに新しい関数を追加したりできます。この新しい関数には、パラメーターとしてスキーマ名が含まれます。たとえば、Fill(table As(tableName)、schemaName As String)です。これが私がそれをする方法です:

  1. 新しいファイルを作成し、(dataSetName)。(whatever_you_like).vbという名前を付けます。
  2. 一番上に名前空間(dataSetName)TableAdaptersを置きます。
  3. Importステートメントを使用して、データセット内のテーブルに簡単にアクセスします。(solutionName)。(dataSetName)をインポートします。
  4. 新しい関数を定義します。このサンプル関数は少し単純化されていますが、アイデアを得るには十分だと思います。

部分クラス(tableName)TableAdapterパブリックオーバーロード関数Fill(_ table As(tableName)、_ schemaName As String)As Integer

Dim args() As String = {schemaName, table.TableName}
Dim selectCmdText As String = "SELECT * FROM {0}.{1}"
selectCmdText = String.Format(selectCmdText, args)

Connection.Open()
Dim selectCmd As New MySqlCommand(selectCmdText, Connection)    
Dim adapter As New MySqlDataAdapter(selectCmd)

Dim returnValue As Integer = 0
returnValue = adapter.Fill(table)

Connection.Close()

Return returnValue

終了関数終了クラス

よろしくお願いいたします。CarlosMallen

于 2011-06-23T01:49:57.217 に答える