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; }
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(); } }
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."; }
private void btnConnect_Click(object sender, EventArgs e) { tbConnectionString.Text = SqlConnectionDialog.Connect(); ValidateConnection(); }