Hi I am currently using TableAdapter that returns a dataTable, which is fine to use when result table should have more than one row like :
MyItemsDataTable myItemsDataTable = Adapter.GetAllItems();
but if we need only one row as a result, say an item, which has a particular ID
MyItemsDataSet.MyItemRow itemRow = Adapter.GetItemByID(id)[0];
how can I make Adapter to return one row instead of DataTable. I am using DataSet Designer wizard and gives me two options for putting in SELECT statement
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)
and using similar query
SELECT * from
FROM FOOD_ITEMS
WHERE (ITEM_ID = @ITEM_ID)
Do I need to override this method or add a new one ?
public virtual MyItemsDataSet.MyItemsDataTable GetItemByID(int ITEM_ID)
probably something like
public virtual MyItemsDataSet.MyItemRow GetItemByID(int ITEM_ID)
If so, I cannot do it in designer generated file !! where can I do this ?
Thanks
Create a new Select statement in the Dataset Designer. Use Select which return rows
. Then use the following query:
SELECT TOP 1 * from
FROM FOOD_ITEMS
WHERE (ITEM_ID = @ITEM_ID)
Save this method as GetFirstItemByID()
or something similar.
For the googlers out there, many of the non-MS databases (eg. MySQL) will use the following syntax instead:
SELECT * from
FROM FOOD_ITEMS
WHERE (ITEM_ID = @ITEM_ID)
LIMIT 1
I believe the only way is to access the first row in the data table via an index, as you are doing with this query -
MyItemsDataSet.MyItemRow itemRow = Adapter.GetItemByID(id)[0];
Another thing you should consider is dumping table adapters and using LINQ2SQL instead. LINQ supports the .FIRST() method, which does precisely what you want.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With