private static string GetInsertStatement(string tableName, DataRow row)
        {
            string columns = "";
            string values  = "";

            foreach (DataColumn column in row.Table.Columns)
            {
                if (row[column] != DBNull.Value)
                {
                    if (!string.IsNullOrWhiteSpace(columns))
                    {
                        columns += ", ";
                        values  += ", ";
                    }

                    columns += string.Format("[{0}]", column.ColumnName);
                    dynamic value = row[column];
                    values += JetSyntaxHelper.ToSqlString(value);
                }
            }
            return(string.Format("INSERT INTO [{0}] ({1}) VALUES ({2})", tableName, columns, values));
        }
        private static void ReadLastStructureDataTable(IDbConnection connection, string tableName)
        {
            _lastTableName = tableName;

            // This is the standard read column for DBMS
            string sql = string.Empty;

            sql += "Select Top 1 ";
            sql += "    * ";
            sql += "From ";
            sql += string.Format("    {0} ", JetSyntaxHelper.QuoteIdentifier(_lastTableName));

            IDbCommand  command    = null;
            IDataReader dataReader = null;

            try
            {
                command             = connection.CreateCommand();
                command.CommandText = sql;

                dataReader = command.ExecuteReader(CommandBehavior.KeyInfo);

                _lastStructureDataTable = dataReader.GetSchemaTable();
            }

            finally
            {
                // Exceptions will not be catched but these instructions will be executed anyway
                if (command != null)
                {
                    command.Dispose();
                }

                if (dataReader != null)
                {
                    dataReader.Dispose();
                }
            }
        }