You didn't specify the problems you ran into but I take it one was the location of keyword
WHERE
When you build the conditions dynamically you can for example use a constant condition to ensure that WHERE is always present. For example
sqlCommandText.Append(@"select m.make, m.model, car.price, color.color, car.mileage, carlot.lotid, car.pic
from car
join makemodel as m ON m.mmid = car.mmid
join color ON car.colorid = color.colorid
join carlot ON carlot.carid = car.carid
where 1 = 1");
Another observation from your code is that the model condition seems malformed since it's missing the column name. Should it be
if (!string.IsNullOrEmpty(model))
{
sqlCommandText.Append(" OR m.model = @model");
Third thing is that if you're using OR's you most likely need to use parenthesis to ensure that proper group of conditions are handled with OR's. Otherwise you may end up getting rows that would not belong to the result set.
And last one is that while it's okay to put a semicolon to the end of the statement, you actually don't need to do this since your command has only one statement to execute.
Hope these help.