Replace # with single quotation like ['] and try again.
cmd = new SqlCommand("SELECT (InvoiceNo) as [Invoice No],(InvoiceDate) as [Invoice Date],(Sales.CustomerID) as [Customer ID],(CustomerName) as [Customer Name],(GrandTotal) as [Grand Total],(TotalPayment) as [Total Payment],(PaymentDue) as [Payment Due] from Sales,Customer where Sales.CustomerID=Customer.CustomerID and InvoiceDate between '" + dtpInvoiceDateFrom.Text + "' And '" + dtpInvoiceDateTo.Text + "' order by InvoiceDate desc", con);
If you get invalid datetime error than you need to format your date into yyyy-mm-dd format and try again. By the way Solution 1 is more elegant.