As Alby said, you would put the WHERE prior to your ORDER BY. There's also no need to order by invoice number if you're only selecting a single one to begin with. You also might consider using a shorter alias for your table names...having the alias the same as the actual name doesn't buy you anything in readability:
Report.SQLQueryString = "SELECT s.Invoice_no, s.Party_name, s.Sales_date, s.Item_type, s.Item_name, s.Qty, s.price_per_unit, c.City, d.item_description… From Sales_master s JOIN sales_item_description d ON s.Invoice_no = d.invoice_number JOIN Customer_master c ON s.Custo_id = c.cutomer_id WHERE s.Invoice_number = "INV00112" Order By s.Party_name ASC "
If you're dealing with large table sizes, it's probably more efficient to use implicit joins instead of explict ones. That way, you can give the most limiting criteria first before you ever start joining tables:
Report.SQLQueryString = "SELECT s.Invoice_no, s.Party_name, s.Sales_date, s.Item_type, s.Item_name, s.Qty, s.price_per_unit, c.City, d.item_description… FROM Sales_master s, sales_item_description d, Customer_master c WHERE s.Invoice_number = "INV00112" AND d.invoice_number = "INV00112" AND s.Custo_id = c.cutomer_id Order By s.Party_name ASC "