Пример #1
0
        internal static List <ExplorerItem> GetSchema(FileDbDynamicDriverProperties props, out string typeName)
        {
            typeName = "FileDbContext";

            var tables = new List <ExplorerItem>();

            DirectoryInfo dirInfo = new DirectoryInfo(props.Folder);

            FileInfo[] files = dirInfo.GetFiles(String.Format("*.{0}", props.Extension));

            foreach (FileInfo fi in files)
            {
                string tableName = fi.Name.Substring(0, fi.Name.LastIndexOf('.'));

                ExplorerItem item = new ExplorerItem(tableName, ExplorerItemKind.QueryableObject, ExplorerIcon.Table)
                {
                    IsEnumerable = true,
                    ToolTipText  = "", // FormatTypeName (prop.PropertyType, false),

                    // Store the filename to the Tag property - we'll use it below
                    Tag = fi.FullName
                };

                tables.Add(item);
            }

            // Populate the columns (properties) of each entity:

            foreach (ExplorerItem table in tables)
            {
                FileDbNs.Fields fields = getFieldsFromDb(table.Tag as string);

                var columns = new List <ExplorerItem>();

                foreach (FileDbNs.Field field in fields)
                {
                    string       name = string.Format("{0} ({1})", field.Name, field.DataType.ToString());
                    ExplorerItem item = new ExplorerItem(name, ExplorerItemKind.Property, ExplorerIcon.Column);
                    columns.Add(item);
                }
                table.Children = columns;
            }

            return(tables);
        }
Пример #2
0
        // Generate the C# code for our FileDbDataContext class, which we'll compile in
        // the BuildAssembly method
        //
        internal static string GenerateCode(string folder, string extension, string nameSpace)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(folder);

            FileInfo[] files        = dirInfo.GetFiles(String.Format("*.{0}", extension));
            string     dotExtension = "." + extension;

            var writer = new StringWriter();


            writer.WriteLine("using System;");
            writer.WriteLine("using System.Collections.Generic;");
            writer.WriteLine();
            writer.WriteLine("namespace " + nameSpace);
            writer.WriteLine('{');

            // create a class for each database

            foreach (FileInfo fi in files)
            {
                string tablename = fi.Name.Replace(dotExtension, string.Empty);

                writer.WriteLine(string.Format("public class {0} {{", tablename));

                // open the database and get the column names and create a Property for each

                FileDbNs.Fields fields = getFieldsFromDb(fi.FullName);

                foreach (FileDbNs.Field field in fields)
                {
                    string dataType = string.Empty;

                    switch (field.DataType)
                    {
                    case FileDbNs.DataTypeEnum.String:
                        dataType = field.IsArray ? "String[]" : "String";
                        break;

                    case FileDbNs.DataTypeEnum.Bool:
                        dataType = field.IsArray? "Boolean[]" : "Boolean";
                        break;

                    case FileDbNs.DataTypeEnum.Byte:
                        dataType = field.IsArray ? "Byte[]" : "Byte";
                        break;

                    case FileDbNs.DataTypeEnum.DateTime:
                        dataType = field.IsArray ? "DateTime[]" : "DateTime";
                        break;

                    case FileDbNs.DataTypeEnum.Float:
                        dataType = field.IsArray ? "Single[]" : "Single";
                        break;

                    case FileDbNs.DataTypeEnum.Double:
                        dataType = field.IsArray ? "Double[]" : "Double";
                        break;

                    case FileDbNs.DataTypeEnum.Int32:
                        dataType = field.IsArray ? "Int32[]" : "Int32";
                        break;

                    case FileDbNs.DataTypeEnum.UInt32:
                        dataType = field.IsArray ? "UInt32[]" : "UInt32";
                        break;
                    }

                    writer.WriteLine(string.Format("  public {0} {1} {{ get; set; }}", dataType, field.Name));
                }

                writer.WriteLine('}');   // class
                writer.WriteLine();
            }
            writer.WriteLine();

            // create the FileDbContext class

            writer.WriteLine("public class FileDbContext {");
            writer.WriteLine();
            writer.WriteLine("string _dbPath;");
            writer.WriteLine();

            // constructor

            writer.WriteLine("public FileDbContext( string dbPath )");
            writer.WriteLine('{');
            writer.WriteLine("_dbPath = dbPath;");
            writer.WriteLine('}');
            writer.WriteLine();

            // public Table properties

            foreach (FileInfo fi in files)
            {
                string tablename = fi.Name.Replace(dotExtension, string.Empty);
                // open the db file and get all the records
                writer.WriteLine(string.Format("public IList<{0}> {1}", tablename, tablename));
                writer.WriteLine('{');
                writer.WriteLine("  get");
                writer.WriteLine("  {");
                writer.WriteLine(string.Format("    IList<{0}> _{1};", tablename, tablename));
                writer.WriteLine("    FileDbNs.FileDb db = new FileDbNs.FileDb();");
                writer.WriteLine("    try");
                writer.WriteLine("    {");
                writer.WriteLine(string.Format("      db.Open( System.IO.Path.Combine( _dbPath, @\"{0}\" ), false );", fi.Name));
                writer.WriteLine(string.Format("      _{0} = db.SelectAllRecords<{1}>();", tablename, tablename));
                writer.WriteLine("    }");
                writer.WriteLine("    finally");
                writer.WriteLine("    {");
                writer.WriteLine("      if( db.IsOpen )");
                writer.WriteLine("        db.Close();");
                writer.WriteLine("    }");
                writer.WriteLine(string.Format("    return _{0};", tablename));
                writer.WriteLine("  }");
                //writer.WriteLine( string.Format( "get {{ return _{0}; }}", tablename ) );
                writer.WriteLine('}');
                writer.WriteLine();
            }

            writer.WriteLine('}');   // class
            writer.WriteLine('}');   // namespace

            return(writer.ToString());
        }