Simple: You read (and thus discard) the first record in the reader when you call Read:
while (rdr.Read())
{
dbdt.Load(rdr);
Read reads a row, and removes it from the reader: so when you call Load the row is no longer available.
Try
if (rdr.HasRows)
{
dbtb.Load(rdr);
But please, don't do things like that! Do not concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Use Parametrized queries instead.