DataReader positioned beyond end of result set?!

Ich denke, dass ist ziemlich selbsterklaerend, wenn ein User in der DB existiert, dann gibt’s keine Exception. Existiert der Benutzer nicht, so wird eine Exception geworfen, kann mir nicht erklaeren wieso.

Jemand eine Ahnung?

public void Login_Sql_Register(string username, string password, Button button, Label label, Label label2, Label label3, Label label4, Label label5, CheckBox checkbox, ListBox lb)
    {
        NpgsqlParameter param;
        NpgsqlConnection connection = new NpgsqlConnection(_MyConnString);
        IDbCommand cmd = connection.CreateCommand();
        string sql;
        connection.Open();

        param = (NpgsqlParameter)cmd.CreateParameter();
        param.ParameterName = "@uname";
        param.DbType = DbType.String;
        param.Value = username;
        cmd.Parameters.Add(param);

        param = (NpgsqlParameter)cmd.CreateParameter();
        param.ParameterName = "@password";
        param.DbType = DbType.String;
        param.Value = username;
        cmd.Parameters.Add(param);

        sql = "select user_id from users where login_name=@uname";

        cmd.CommandText = sql;

        IDataReader datareader = cmd.ExecuteReader();

        datareader.Read();

        string recv = datareader[0].ToString();

        if (recv == "")
        {
            //DataReader positioned beyond end of result set. (Exception)
            sql = "INSERT INTO users (login_name, password_md5) VALUES (@uname, @password);";
            cmd.CommandText = sql;

            cmd.ExecuteNonQuery();

            label2.Visible = false;
            label3.Visible = false;
            label4.Visible = false;
            label5.Visible = false;
            label.Text = "<font color=Gold>####</font>Erfolgreich registriert!
<font color=Gold>###</font>Bitte nochmals anmelden!";
            button.PostBackUrl = "Login.aspx";
            checkbox.Checked = false;
        }
        else if (recv != "")
        {
            // Das funktioniert einwandfrei
            label2.Visible = false;
            label3.Visible = false;
            label4.Visible = false;
            label.Text = "<font color=Gold>##</font>Fehler: Dieser Benutzer <font color=Gold>######</font>existiert schon!";
            button.PostBackUrl = "Login.aspx";
        }
     }