The tcpdf file that causes the "data has already been output" is in the tcpdf folder called tcpdf.php. You can modify it:
add the line ob_end_clean(); as below (3rd last line):
public function Output($name='doc.pdf', $dest='I') {
    //LOTS OF CODE HERE....}
    switch($dest) {
        case 'I': {
        // Send PDF to the standard output
        if (ob_get_contents()) {
        $this->Error('Some data has already been output, can\'t send PDF file');}
        //some code here....}
            case 'D': {         // download PDF as file
        if (ob_get_contents()) {
    $this->Error('Some data has already been output, can\'t send PDF file');}
            break;}
        case 'F':
        case 'FI':
        case 'FD': {
            // save PDF to a local file
                 //LOTS OF CODE HERE.....       break;}
        case 'E': {
            // return PDF as base64 mime email attachment)
        case 'S': {
            // returns PDF as a string
            return $this->getBuffer();
        }
        default: {
            $this->Error('Incorrect output destination: '.$dest);
        }
    }
           ob_end_clean(); //add this line here 
    return '';
}
Now lets look at your code.
I see you have $rs and $sql mixed up. These are 2 different things working together. 
$conn=odbc_connect('northwind','****','*****');
if (!$conn) {
   exit("Connection Failed: " . $conn);
 }
$sql="SELECT * FROM products"; //is products your table name?
$rs=odbc_exec($conn,$sql);
if (!$rs) {
  exit("Error in SQL");
}
while (odbc_fetch_row($rs)) {
  $prodname=odbc_result($rs,"Product Name"); //but preferably never use spaces for table names.
 $prodid=odbc_result($rs,"ProdID");  //prodID is assumed attribute
  echo "$prodname";
  echo "$prodid";
}
odbc_close($conn);
now you can use the $prodname and output it to the TCPDF output.  
and I assume your are connecting to a MS access database.