// We try parsing the SQL statement to get the table name as a last resort when
        // the driver doesn't return this information back to us.
        //
        // we can't handle multiple tablenames (JOIN)
        // only the first tablename will be returned

        internal string GetTableNameFromCommandText()
        {
            if (command == null){
                return null;
            }
            String localcmdtext = _cmdText;
            if (ADP.IsEmpty(localcmdtext)) { // fxcop
                return null;
            }
            String tablename;
            int     idx;
            CStringTokenizer tokenstmt = new CStringTokenizer(localcmdtext, Connection.QuoteChar(ADP.GetSchemaTable)[0], Connection.EscapeChar(ADP.GetSchemaTable));

            if (tokenstmt.StartsWith("select") == true) {
              // select command, search for from clause
              idx = tokenstmt.FindTokenIndex("from");
            }
            else {
                if ((tokenstmt.StartsWith("insert") == true) ||
                    (tokenstmt.StartsWith("update") == true) ||
                    (tokenstmt.StartsWith("delete") == true) ) {
                    // Get the following word
                    idx = tokenstmt.CurrentPosition;
                }
                else
                    idx = -1;
            }
            if (idx == -1)
                return null;
            // The next token is the table name
            tablename = tokenstmt.NextToken();

            localcmdtext = tokenstmt.NextToken();
            if ((localcmdtext.Length > 0) && (localcmdtext[0] == ',')) {
                return null;        // can't handle multiple tables
            }
            if ((localcmdtext.Length == 2) &&
                ((localcmdtext[0] == 'a') || (localcmdtext[0] == 'A')) &&
                ((localcmdtext[1] == 's') || (localcmdtext[1] == 'S'))) {
                // aliased table, skip the alias name
                localcmdtext = tokenstmt.NextToken();
                localcmdtext = tokenstmt.NextToken();
                if ((localcmdtext.Length > 0) && (localcmdtext[0] == ',')) {
                    return null;        // Multiple tables
                }
            }
            return tablename;
        }
 internal string GetTableNameFromCommandText()
 {
     int currentPosition;
     if (this.command == null)
     {
         return null;
     }
     string str = this._cmdText;
     if (ADP.IsEmpty(str))
     {
         return null;
     }
     CStringTokenizer tokenizer = new CStringTokenizer(str, this.Connection.QuoteChar("GetSchemaTable")[0], this.Connection.EscapeChar("GetSchemaTable"));
     if (tokenizer.StartsWith("select"))
     {
         currentPosition = tokenizer.FindTokenIndex("from");
     }
     else if ((tokenizer.StartsWith("insert") || tokenizer.StartsWith("update")) || tokenizer.StartsWith("delete"))
     {
         currentPosition = tokenizer.CurrentPosition;
     }
     else
     {
         currentPosition = -1;
     }
     if (currentPosition == -1)
     {
         return null;
     }
     string str2 = tokenizer.NextToken();
     str = tokenizer.NextToken();
     if ((str.Length > 0) && (str[0] == ','))
     {
         return null;
     }
     if ((str.Length == 2) && ((str[0] == 'a') || (str[0] == 'A')))
     {
         if ((str[1] != 's') && (str[1] != 'S'))
         {
             return str2;
         }
         str = tokenizer.NextToken();
         str = tokenizer.NextToken();
         if ((str.Length > 0) && (str[0] == ','))
         {
             return null;
         }
     }
     return str2;
 }