Вы никогда не должны выполнять такие SQL-операторы, а использовать параметры.Вы используете параметры для своего второго утверждения, но не делаете это для первого.
Сказав это, вы пытаетесь использовать строку запроса s в качестве значения параметра для @iv.Вместо этого вы должны сначала выполнить ExecuteScalar и использовать результат этого во второй.
Однако вы можете получить значение idviagem и выполнить вставку в одном единственном выражении, например:
string q = @"insert into tbpassageiro
(nome,cc,fotocc,idviagem)
select @n,@cc,@p,idViagem from tbviagem where dia like @dia";
SqlCommand cmd = new SqlCommand(q, con);
cmd.Parameters.AddWithValue("@p", data);
cmd.Parameters.AddWithValue("@n", nometxt.Text);
cmd.Parameters.AddWithValue("@cc", cctxt.Text);
cmd.Parameters.Add("@dia", SqlDbType.VarChar).Value = idatxt.Text;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Примечание. Я не предлагаю использовать AddWithValue, вместо этого предпочитайте Add.
РЕДАКТИРОВАТЬ: Для выборки с полем Dia Datetime:
DateTime dt;
cmd.Parameters.Add("@dia", SqlDbType.DateTime);
if (DateTime.TryParse(idatxt.Text, out dt))
{
cmd.Parameters["@dia"].Value = dt;
}
else
{
cmd.Parameters["@dia"].Value = DBNull.Value;
}
Если idatxt для получения значения date \ datetime, было бы намного проще использовать DateTimePicker для получения действительного значения DateTime.