-
Notifications
You must be signed in to change notification settings - Fork 0
/
SQLScriptGenerator.cs
200 lines (166 loc) · 7.28 KB
/
SQLScriptGenerator.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace MysqlToSqlServerConverter
{
class SQLScriptGenerator
{
public bool ShowImportantMessage { get; set; }
public bool ShowScriptMessage { get; set; }
public bool ShowRetrievalMessage { get; set; }
public bool ShowAlterTableMessage { get; set; }
public string ConnectionStringMsSQL { get; set; }
public string ConnectionStringMySQL { get; set; }
public string DatabaseMsSQL { get; set; }
public string DatabaseMySQL { get; set; }
public string ControlFile { get; set; }
public string ExecutionMessage { get; set; }
public SQLScriptGenerator(string connectionStringMsSQL,
string connectionStringMySQL, string databaseMsSQL, string databaseMySQL,string controlFile,
bool showImportantMessage, bool showScriptMessage, bool showRetrievalMessage, bool showAlterTableMessage)
{
this.SetConnections(connectionStringMsSQL,
connectionStringMySQL, databaseMsSQL, databaseMySQL,controlFile,
showImportantMessage, showScriptMessage, showRetrievalMessage, showAlterTableMessage);
}
public void SetConnections(string connectionStringMsSQL,
string connectionStringMySQL, string databaseMsSQL, string databaseMySQL,string controlFile,
bool showImportantMessage, bool showScriptMessage, bool showRetrievalMessage, bool showAlterTableMessage)
{
this.ShowImportantMessage = showImportantMessage;
this.ShowScriptMessage = showScriptMessage;
this.ShowRetrievalMessage = showRetrievalMessage;
this.ShowAlterTableMessage = showAlterTableMessage;
this.ConnectionStringMsSQL = connectionStringMsSQL;
this.ConnectionStringMySQL = connectionStringMySQL;
this.DatabaseMsSQL = databaseMsSQL;
this.DatabaseMySQL = databaseMySQL;
this.ControlFile = controlFile;
}
void ConnectionInfoMessage(object sender, SqlInfoMessageEventArgs e)
{
ExecutionMessage = e.Message;
}
public void Generate()
{
bool errored = false;
using (SqlConnection conn = new SqlConnection(this.ConnectionStringMsSQL))
{
conn.InfoMessage += new SqlInfoMessageEventHandler(ConnectionInfoMessage);
conn.Open();
try
{
string sql = GetControlSql(this.ControlFile);
OnScriptBeginGeneration(new ScriptGeneratedEventArgs());
//using (SqlDataAdapter adapter = new SqlDataAdapter())
//{
using (SqlCommand command = new SqlCommand { Connection = conn, CommandType = CommandType.Text })
{
command.CommandTimeout = 600;
command.CommandText = sql;
// command.Parameters.AddWithValue("@StartDate", versionDate);
command.Parameters.AddWithValue("@database",this.DatabaseMsSQL);
//--declare @database nvarchar(255)
command.Parameters.AddWithValue("@mysqldatabase", this.DatabaseMySQL);
//--declare @mysqldatabase nvarchar(255)
command.Parameters.AddWithValue("@showmessage",this.ShowScriptMessage);
//--declare @showmessage bit
command.Parameters.AddWithValue("@showalterquerymessage", this.ShowAlterTableMessage);
//--declare @showalterquerymessage bit
command.Parameters.AddWithValue("@showretrievalquerymessage", this.ShowRetrievalMessage);
//--declare @showretrievalquerymessage bit
command.Parameters.AddWithValue("@showimportantmessage", this.ShowImportantMessage);
//--declare @showimportantmessage bit
int result = command.ExecuteNonQuery();
OnScriptEndGeneration(new ScriptGeneratedEventArgs(ExecutionMessage));
}
//}
}
catch (Exception scriptException)
{
errored = true;
OnGenerationError(new ScriptGeneratedEventArgs(scriptException, ExecutionMessage));
//break;
}
if (!errored)
{
OnGenerationComplete(new ScriptGeneratedEventArgs(ExecutionMessage));
}
conn.Close();
}
}
public event EventHandler<ScriptGeneratedEventArgs> ScriptBeginGeneration;
public event EventHandler<ScriptGeneratedEventArgs> ScriptEndGeneration;
public event EventHandler<ScriptGeneratedEventArgs> GenerationError;
public event EventHandler<ScriptGeneratedEventArgs> GenerationComplete;
private void OnScriptBeginGeneration(ScriptGeneratedEventArgs e)
{
if (ScriptBeginGeneration != null)
{
ScriptBeginGeneration(this, e);
}
}
private void OnScriptEndGeneration(ScriptGeneratedEventArgs e)
{
if (ScriptEndGeneration != null)
{
ScriptEndGeneration(this, e);
}
}
private void OnGenerationError(ScriptGeneratedEventArgs e)
{
if (GenerationError != null)
{
GenerationError(this, e);
}
}
private void OnGenerationComplete(ScriptGeneratedEventArgs e)
{
if (GenerationComplete != null)
{
GenerationComplete(this, e);
}
}
private static string GetControlSql(string fileControl)
{
if (!File.Exists(fileControl))
{
throw new Exception("Control file does not exists - " + fileControl);
}
return File.ReadAllText(fileControl);
}
}
public class ScriptGeneratedEventArgs : EventArgs
{
public Exception GenerationException
{
get;
private set;
}
public string GenerationMessage
{
get;
private set;
}
public ScriptGeneratedEventArgs(Exception generationException)
{
GenerationException = generationException;
}
public ScriptGeneratedEventArgs(Exception generationException,string message)
{
GenerationException = generationException;
GenerationMessage = message;
}
public ScriptGeneratedEventArgs(string message)
{
GenerationMessage = message;
}
public ScriptGeneratedEventArgs()
{
}
}
}