It looks like your are trying to loop through the dataset before you fill it.
You need to add or refresh the rows in dataset first and then loop through the rows.
something like this
cmd.CommandText = @"select * from metb";
da.SelectCommand = cmd;
da.Fill(ds);
if (ds.Tables.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
string fnList = ds.Tables[0].Rows[i]["fn"].ToString();
Label1.Text += fnList+"/n";
}
}