6

こんにちは私は現在、dataTableを返すTableAdapterを使用しています。これは、結果テーブルに次のような複数の行が必要な場合に使用できます。

MyItemsDataTable myItemsDataTable = Adapter.GetAllItems();  

しかし、結果として1行だけが必要な場合は、特定のIDを持つアイテムを言います。

MyItemsDataSet.MyItemRow  itemRow = Adapter.GetItemByID(id)[0];  

DataTableの代わりに1行を返すようにAdapterを作成するにはどうすればよいですか。DataSet Designerウィザードを使用しており、SELECTステートメントを入力するための2つのオプションがあります

Use SQL statements -->  Select which return rows
(returns one or many rows)
Use SQL statements -->  Select which returns a single value rows
(returns a single value) 

同様のクエリを使用する

SELECT * from
FROM  FOOD_ITEMS
WHERE (ITEM_ID = @ITEM_ID)

このメソッドをオーバーライドする必要がありますか、それとも新しいメソッドを追加する必要がありますか?

public virtual MyItemsDataSet.MyItemsDataTable  GetItemByID(int ITEM_ID)

おそらく次のようなもの

public virtual MyItemsDataSet.MyItemRow GetItemByID(int ITEM_ID)

もしそうなら、私はデザイナーが生成したファイルでそれを行うことはできません!! どこでこれを行うことができますか?

ありがとう

4

2 に答える 2

3

このクエリで行っているように、インデックスを介してデータテーブルの最初の行にアクセスするのが唯一の方法だと思います-

MyItemsDataSet.MyItemRow  itemRow = Adapter.GetItemByID(id)[0];  

考慮すべきもう1つのことは、テーブルアダプターをダンプし、代わりにLINQ2SQLを使用することです。LINQは.FIRST()メソッドをサポートしており、必要な処理を正確に実行します。

于 2010-01-15T15:22:48.300 に答える
3

データセットデザイナで新しいSelectステートメントを作成します。を使用しSelect which return rowsます。次に、次のクエリを使用します。

SELECT TOP 1 * from 
FROM  FOOD_ITEMS 
WHERE (ITEM_ID = @ITEM_ID)

このメソッドをGetFirstItemByID()または同様のものとして保存します。


そこにいるグーグルの場合、MS以外のデータベース(MySQLなど)の多くは、代わりに次の構文を使用します。

SELECT * from 
FROM  FOOD_ITEMS 
WHERE (ITEM_ID = @ITEM_ID)
LIMIT 1
于 2010-01-15T15:27:11.257 に答える