Boa tarde!
Olha para colocar o retorno de um DataReader em variáveis que não são do tipo lista você precisará fazer um loop seja usando o for ou o foreach para percorrer os dados que o datareader que no seu caso se chama dr2 e ver se encontra o valor desejado e só
depois jogar nas variaveis x2 e x3.
Vou te dar um exemplo basico:
(Não testei ok pois no PC que estou nao tenho o Visual Studio instalado mias fica parecido com isso)
if (dr2.HasRows)
{
while (dr2.Read())
{
x2 = dr2.GetInt32(0);
x3 = dr2.GetString(1);
}
}
else
{
MessageBox.Show("Não há dados");
}
dr2.Close();
Tenta aí...
Visite meu canal no youtube estou iniciando vários exemplos práticos que podem ser utilizados no dia a dia de nós programadores...
https://www.youtube.com/channel/UCbIAUS0RNnCzU2B5SGFDJgg