예제 #1
0
        protected void OnCreateTable()
        {
            BaseNode            node           = CurrentNode.DataItem as BaseNode;
            IDbFactory          fac            = node.ConnectionContext.DbFactory;
            IEditSchemaProvider schemaProvider = (IEditSchemaProvider)node.ConnectionContext.SchemaProvider;

            // Need to detect if it is a previous (saved) table with the same name.
            string name    = AddinCatalog.GetString("NewTable");
            int    lastIdx = 0;
            TableSchemaCollection tables = schemaProvider.GetTables();

            for (int t = tables.Count - 1; t > -1; t--)
            {
                if (tables[t].Name.ToLower() == name.ToLower())
                {
                    name = string.Concat(name, "1");
                    break;
                }
                else if (tables[t].Name.StartsWith(name, StringComparison.OrdinalIgnoreCase))
                {
                    string idx = tables[t].Name.Substring(name.Length);
                    int    newIdx;
                    if (int.TryParse(idx, out newIdx))
                    {
                        lastIdx = newIdx;
                        break;
                    }
                }
            }
            if (lastIdx != 0)
            {
                name = String.Concat(name, lastIdx + 1);
            }

            TableSchema table = schemaProvider.CreateTableSchema(name);

            if (fac.GuiProvider.ShowTableEditorDialog(schemaProvider, table, true))
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(OnCreateTableThreaded), new object[] { schemaProvider, table, node } as object);
            }
        }