Exemplo n.º 1
0
        private void GenerateRestorePageScriptMenuItem_Click(object sender, EventArgs e)
        {
            var dlg = new SqlConnectionDialog
            {
                SaveHelper       = { SaveMethod = connectionString => ConnectionString = connectionString },
                Title            = "Specify connection and page pointer",
                ConnectionString = ConnectionString,
                Mode             = Mode.PageId
            };

            var dialogResult = dlg.Show();

            if (dialogResult != DialogResult.OK)
            {
                return;
            }

            var restorePageScriptWriter = new RestorePageScriptWriter(Database);

            var resultScript = restorePageScriptWriter.CreateRestoreScriptWithRollback(dlg.ConnectionString, dlg.PagePointer);

            // Set code
            txtCode.Text = resultScript;
            txtCode.Refresh();
            grid.Visible        = false;
            txtCode.Visible     = true;
            gridStatusRows.Text = string.Empty;
        }
Exemplo n.º 2
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            SqlConnectionDialog sqlConnectionDialog = new SqlConnectionDialog();

            if (sqlConnectionDialog.ShowDialog() == DialogResult.OK)
            {
                server = sqlConnectionDialog.Server;

                databaseInformationControl.Server = server;

                serverEditionToolStripStatusLabel.Text = String.Format(ServerEditionToolStripText, server.Edition);
                serverNameToolStripStatusLabel.Text    = String.Format(ServerNameToolStripText, server.Name);
                serverVersionToolStripStatusLabel.Text = String.Format(ServerVersionToolStripText, server.Version);
            }
            else
            {
                Application.Exit();
            }
        }
Exemplo n.º 3
0
        private async void ExportDataMenuItem_Click(object sender, EventArgs e)
        {
            var tableNameParts = treeview.SelectedNode.Text.Split('.');
            var tableName      = tableNameParts.Last();
            var newTableName   = tableName + DateTime.Now.ToString("_yyyyMMddHHmmss");

            var dlg = new SqlConnectionDialog
            {
                SaveHelper       = { SaveMethod = connectionString => ConnectionString = connectionString },
                Title            = "Specify connection and target table name",
                ConnectionString = ConnectionString,
                TableName        = newTableName
            };
            var dialogResult = dlg.Show();

            if (dialogResult != DialogResult.OK)
            {
                return;
            }

            var bulkCopyBatchSize = 1000_000;

            if (int.TryParse(ConfigurationManager.AppSettings["BulKCopyBatchSize"], out var configBulkCopyBatchSize))
            {
                bulkCopyBatchSize = configBulkCopyBatchSize;
            }
            var bulkCopyNotifyAfter = 1000;

            if (int.TryParse(ConfigurationManager.AppSettings["BulKCopyNotifyAfter"], out var configBulkCopyNotifyAfter))
            {
                bulkCopyNotifyAfter = configBulkCopyNotifyAfter;
            }

            var schema = Database.Dmvs.Schemas.FirstOrDefault(x => x.name == tableNameParts[0]);

            var scanner   = new DataScanner(Database);
            var schemaRow = scanner.GetEmptyDataRow(tableName, schema?.schema_id);
            var rows      = scanner.ScanTable(tableName, schema?.schema_id, false);

            var createTableSql = new CreateTableScriptWriter(Database).GetCreateExportTableScript(dlg.TableName, schemaRow);

            using (var connection = new SqlConnection(dlg.ConnectionString))
            {
                await connection.OpenAsync();

                using (var command = connection.CreateCommand())
                {
                    command.CommandText = createTableSql;
                    await command.ExecuteNonQueryAsync();

                    var dataReader = new TableReader(rows, schemaRow);

                    using (var bulkCopy = new SqlBulkCopy(connection))
                    {
                        bulkCopy.BatchSize            = bulkCopyBatchSize;
                        bulkCopy.DestinationTableName = dlg.TableName;
                        bulkCopy.BulkCopyTimeout      = (int)TimeSpan.FromHours(1).TotalSeconds;
                        bulkCopy.SqlRowsCopied       += BulkCopyOnSqlRowsCopied;
                        bulkCopy.NotifyAfter          = bulkCopyNotifyAfter;
                        // Just to exclude Computed columns from the mappings
                        foreach (var columnIdx in schemaRow.Columns
                                 .Select((c, i) => new
                        {
                            c.Type,
                            Index = i
                        }).Where(x => x.Type != ColumnType.Computed)
                                 .Select(x => x.Index))
                        {
                            bulkCopy.ColumnMappings.Add(columnIdx, columnIdx);
                        }

                        await bulkCopy.WriteToServerAsync(dataReader);

                        bulkCopy.SqlRowsCopied -= BulkCopyOnSqlRowsCopied;
                    }
                }
            }

            gridStatusRows.Text = $"Export to table {dlg.TableName} finished.";
        }
Exemplo n.º 4
0
        private void btnConnect_Click(object sender, EventArgs e)
        {
            tbConnectionString.Text = SqlConnectionDialog.Connect();

            ValidateConnection();
        }