If I'm looking your code correctly the columns in the database are defined as date, at least you define the parameters as dates, that's good.
However, you cannot rely on data type conversion to happen implicitly when you set the value for the parameter. At the moment you set a string value in format yyyy-MM-dd and rely that someone else converts it to a proper date. That could happen, depending on different settings (in several places) but the chances are that it fails.
So instead you should convert the string in your UI to a date
before you set it as a value of a parameter.
If you know that the format for the date in the label is always the same you can do an exact parse when setting the parameter. Something like
...
cmd.Parameters.Add("@d1", SqlDbType.Date).Value = DateTime.ParseExact(Label1.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture)
cmd.Parameters.Add("@d2", SqlDbType.Date).Value = DateTime.ParseExact(Label2.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture)
...