Salve,
come puoi vedere in
https://docs.microsoft.com/it-it/dotnet/api/system.data.sqlclient.sqldatareader.getstring?view=netframework-4.8, GetString accetta un intero come parametro (quindi eventualmente l'ordinale della colonna) e non una string (il nome della colonna)... puoi pero' nel caso risolvere il problema con
Txt_mon1.Text = dr.GetString(dr.GetOridnal("Mon1"))
che fornisce al metodo appunto l'ordinale della colonna in base al suo "nome"...
[edit] ovviamente, se la lettura deve essere effettuata in un ciclo, com nel tuo DO WHILE, e' meglio recuperare l'ordinal prima del ciclo e quindi usare quel riferimento numerale all'interno del ciclo:
Dim iField as integer = dr.GetString(dr.GetOridnal("Mon1"))
Do While dr.Read()
Txt_mon1.Text = dr.GetString(iField)
Loop
pero' c'e' un altro problema in quel ciclo, in quanto Txt_mon1 viene sempre sovrascritto ad ogni ripetizione del ciclo, qundi, all'uscita del Do While, Txt_mon conterra' SOLO il valore dell'ultima riga recuperata dal Reader... in questo caso, se vuoi TUTTI i valori, oltre ad impostare Txt_mon come multiline, ti conviene concatenare i valori e valorizzare il texbox solo alla fine, ad esempio con uno StringBuilder (
https://docs.microsoft.com/it-it/dotnet/standard/base-types/stringbuilder), quindi, ad esempio
Dim iField as integer = dr.GetString(dr.GetOridnal("Mon1"))
Dim builder As New System.Text.StringBuilder
Do While dr.Read()
builder.AppendLine(dr.GetString(iField))
Next
Txt_mon1.Text = builder.ToString
saluti omnia
--
Andrea