108 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using DBMigration.Models;
 | |
| using DBMigration.Services;
 | |
| using Microsoft.Data.SqlClient;
 | |
| 
 | |
| namespace DBMigration.Forms
 | |
| {
 | |
|     public partial class ProgressForm : Form
 | |
|     {
 | |
|         private readonly List<DatabaseObject> _objects;
 | |
|         private readonly ConnectionInfo _source;
 | |
|         private readonly ConnectionInfo _target;
 | |
|         private readonly MigrationService _migrationService;
 | |
| 
 | |
|         public ProgressForm(List<DatabaseObject> objects, ConnectionInfo source, ConnectionInfo target)
 | |
|         {
 | |
|             InitializeComponent();
 | |
|             _objects = objects;
 | |
|             _source = source;
 | |
|             _target = target;
 | |
|             _migrationService = new MigrationService();
 | |
| 
 | |
|             progressBar.Maximum = _objects.Count;
 | |
|         }
 | |
| 
 | |
|         private async void ProgressForm_Load(object sender, EventArgs e)
 | |
|         {
 | |
|             await Task.Run(() => MigrateObjects());
 | |
|         }
 | |
| 
 | |
|         private void MigrateObjects()
 | |
|         {
 | |
|             foreach (var obj in _objects)
 | |
|             {
 | |
|                 try
 | |
|                 {
 | |
|                     UpdateProgress($"마이그레이션 시작: {obj.Type} {obj.Schema}.{obj.Name}");
 | |
| 
 | |
|                     if (obj.Type == "TABLE")
 | |
|                     {
 | |
|                         _migrationService.MigrateTable(obj, _source, _target);
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         // 뷰나 프로시저의 경우 스크립트만 실행
 | |
|                         ExecuteScript(obj.Definition, _target);
 | |
|                     }
 | |
| 
 | |
|                     UpdateProgress($"완료: {obj.Type} {obj.Schema}.{obj.Name}");
 | |
|                     UpdateProgressBar();
 | |
|                 }
 | |
|                 catch (Exception ex)
 | |
|                 {
 | |
|                     UpdateProgress($"오류 발생: {obj.Type} {obj.Schema}.{obj.Name}");
 | |
|                     UpdateProgress($"에러 메시지: {ex.Message}");
 | |
| 
 | |
|                     if (MessageBox.Show(
 | |
|                         $"{obj.Type} {obj.Schema}.{obj.Name} 마이그레이션 중 오류가 발생했습니다.\n계속 진행하시겠습니까?",
 | |
|                         "오류",
 | |
|                         MessageBoxButtons.YesNo,
 | |
|                         MessageBoxIcon.Error) == DialogResult.No)
 | |
|                     {
 | |
|                         break;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             MessageBox.Show("마이그레이션이 완료되었습니다.", "완료", MessageBoxButtons.OK, MessageBoxIcon.Information);
 | |
|             DialogResult = DialogResult.OK;
 | |
|         }
 | |
| 
 | |
|         private void UpdateProgress(string message)
 | |
|         {
 | |
|             if (InvokeRequired)
 | |
|             {
 | |
|                 Invoke(new Action<string>(UpdateProgress), message);
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             logTextBox.AppendText(message + Environment.NewLine);
 | |
|             logTextBox.SelectionStart = logTextBox.TextLength;
 | |
|             logTextBox.ScrollToCaret();
 | |
|         }
 | |
| 
 | |
|         private void UpdateProgressBar()
 | |
|         {
 | |
|             if (InvokeRequired)
 | |
|             {
 | |
|                 Invoke(new Action(UpdateProgressBar));
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             progressBar.Value++;
 | |
|         }
 | |
| 
 | |
|         private void ExecuteScript(string script, ConnectionInfo connection)
 | |
|         {
 | |
|             using (var conn = new SqlConnection(connection.GetConnectionString()))
 | |
|             {
 | |
|                 conn.Open();
 | |
|                 using (var cmd = new SqlCommand(script, conn))
 | |
|                 {
 | |
|                     cmd.ExecuteNonQuery();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | 
