Skip to content

Commit 3590f1f

Browse files
author
jackyzhou
committed
支持不同命令,runscripts以及backup
1 parent d163df6 commit 3590f1f

File tree

2 files changed

+257
-44
lines changed

2 files changed

+257
-44
lines changed

SQLToolkit/SQLToolkit/Business/DatabaseVersion.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ [Message] [nvarchar](MAX) NULL
3333
/// <param name="path">数据库脚本路径</param>
3434
public static void Upgrade(string path)
3535
{
36+
if(!ValidateSqlPath(path))
37+
{
38+
Helper.LogHelper.Log(string.Format("Error:The path you supply is not exist,path:{0}", path));
39+
return;
40+
}
41+
3642
var allSQLFiles = Directory.GetFiles(path).OrderBy(i => i).ToArray();
3743
var runFiles = updateScripts(allSQLFiles);
3844
foreach (string file in runFiles)
@@ -129,6 +135,15 @@ private static bool ExecutedBefore(string filename)
129135
return exists;
130136
}
131137

138+
private static bool ValidateSqlPath(string path)
139+
{
140+
if (!Directory.Exists(path))
141+
{
142+
return false;
143+
}
144+
return true;
145+
}
146+
132147

133148
}
134149
}

SQLToolkit/SQLToolkit/Program.cs

Lines changed: 242 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -15,75 +15,273 @@ class Program
1515

1616
static void Main(string[] args)
1717
{
18-
19-
if (!ValidateArgs(args))
20-
{
21-
args = new string[100];
22-
Console.WriteLine(@"Please Enter Server Address: ");
23-
args[0] = Console.ReadLine();
24-
25-
Console.WriteLine(@"Please Enter Server Port: ");
26-
args[1] = Console.ReadLine();
18+
string command = string.Empty;
19+
2720

28-
Console.WriteLine(@"Please Enter Database Name: ");
29-
args[2] = Console.ReadLine();
30-
31-
Console.WriteLine(@"Please Enter Database Username: ");
32-
args[3] = Console.ReadLine();
21+
if (args.Length == 0)
22+
{
23+
Helper.LogHelper.Log("No args provided.");
24+
PrintInstructions();
25+
return;
26+
}
3327

34-
Console.WriteLine(@"Please Enter Database Password: ");
35-
args[4] = Console.ReadLine();
28+
command = args[0].ToLower();
3629

37-
Console.WriteLine(@"Please Enter SQL Scripts Path: ");
38-
args[5] = Console.ReadLine();
30+
if (command == "runscripts" || command == "backup")
31+
{
32+
if (command == "runscripts")
33+
{
34+
RunScripts(args);
35+
}
36+
else if (command == "backup")
37+
{
38+
Backup(args);
39+
}
3940
}
40-
if (!ValidateSqlPath(args[5]))
41+
else
4142
{
43+
Console.Write("Wrong command\n");
44+
PrintInstructions();
4245
return;
4346
}
44-
//generate sql connect string
45-
SqlConnectionString= string.Format(@"Server={0},{1};Initial Catalog={2};Persist Security Info=False;User ID={3};Password={4};Connection Timeout=30;", args[0], args[1], args[2], args[3], args[4]);
46-
47-
//init basic scheme for sqltoolkit
48-
Business.DatabaseVersion.Init();
4947

5048

51-
Helper.LogHelper.Log("===============BEGIN=================");
5249

53-
//backup database before upgrade
54-
Business.SQLServer.Backup(args[2],"/home/sqlbackup/devopslabs.bak");
50+
}
5551

5652

57-
//run upgrade sql scripts
58-
var scriptsFolder = args[5];
59-
Business.DatabaseVersion.Upgrade(scriptsFolder);
6053

61-
Helper.LogHelper.Log("===============End=================");
54+
/// <summary>
55+
/// upgarde sql scheme
56+
/// </summary>
57+
private static void RunScripts(string[] args)
58+
{
59+
string database_server = string.Empty;
60+
string database_name = string.Empty;
61+
string database_username = string.Empty;
62+
string database_password = string.Empty;
63+
string sqlscripts_path = string.Empty;
6264

63-
}
65+
for (int i = 0; i < args.Length; i++)
66+
{
67+
switch (args[i])
68+
{
69+
case "-s":
70+
if (i + 1 < args.Length)
71+
{
72+
database_server = args[i + 1];
73+
}
74+
else
75+
{
76+
Console.Write(("Missing argument to -s.\n Supply argument as -s \"database server with port\"\n"));
77+
return;
78+
}
79+
break;
80+
case "-n":
81+
if (i + 1 < args.Length)
82+
{
83+
database_name = args[i + 1];
84+
}
85+
else
86+
{
87+
Console.Write(("Missing argument to -n.\n Supply argument as -n \"database name\"\n"));
88+
return;
89+
}
90+
break;
91+
case "-u":
92+
if (i + 1 < args.Length)
93+
{
94+
database_username = args[i + 1];
95+
}
96+
else
97+
{
98+
Console.Write(("Missing argument to -u.\n Supply argument as -u \"database username\"\n"));
99+
return;
100+
}
101+
break;
102+
case "-p":
103+
if (i + 1 < args.Length)
104+
{
105+
database_password = args[i + 1];
106+
}
107+
else
108+
{
109+
Console.Write(("Missing argument to -p.\n Supply argument as -p \"database password\"\n"));
110+
return;
111+
}
112+
break;
113+
case "-path":
114+
if (i + 1 < args.Length)
115+
{
116+
sqlscripts_path = args[i + 1];
117+
}
118+
else
119+
{
120+
Console.Write(("Missing argument to -path.\n Supply argument as -path \"sql scripts path\"\n"));
121+
return;
122+
}
123+
break;
124+
}
125+
}
64126

65-
private static bool ValidateArgs(string[] args) {
66-
if (args.Length < 6)
127+
if (string.IsNullOrEmpty(database_server))
128+
{
129+
Console.Write(("Missing argument -s.\n Supply argument -s \"database server with port\"\n"));
130+
return;
131+
}
132+
if (string.IsNullOrEmpty(database_name))
133+
{
134+
Console.Write(("Missing argument -n.\n Supply argument -n \"database name\"\n"));
135+
return;
136+
}
137+
if (string.IsNullOrEmpty(database_username))
67138
{
68-
Helper.LogHelper.Log("请提供完整的参数信息");
69-
return false;
139+
Console.Write(("Missing argument -u.\n Supply argument -u \"database username\"\n"));
140+
return;
141+
}
142+
if (string.IsNullOrEmpty(database_password))
143+
{
144+
Console.Write(("Missing argument -p.\n Supply argument -p \"database password\"\n"));
145+
return;
70146
}
71-
return true;
147+
if (string.IsNullOrEmpty(sqlscripts_path)) {
148+
Console.Write(("Missing argument -path.\n Supply argument -path \"sql scripts path\"\n"));
149+
return;
150+
}
151+
152+
153+
SqlConnectionString = string.Format(@"Server={0};Initial Catalog={1};Persist Security Info=False;User ID={2};Password={3};Connection Timeout=30;", database_server,database_name, database_username, database_password);
154+
155+
//init basic scheme for sqltoolkit
156+
Business.DatabaseVersion.Init();
157+
Helper.LogHelper.Log("===============BEGIN=================");
158+
//run upgrade sql scripts
159+
Business.DatabaseVersion.Upgrade(sqlscripts_path);
160+
Helper.LogHelper.Log("===============End=================");
161+
72162
}
73163

74-
private static bool ValidateSqlPath(string path)
164+
/// <summary>
165+
/// backup database
166+
/// </summary>
167+
private static void Backup(string[] args)
75168
{
76-
if (!Directory.Exists(path))
169+
string database_server = string.Empty;
170+
string database_name = string.Empty;
171+
string database_username = string.Empty;
172+
string database_password = string.Empty;
173+
string backup_path = string.Empty;
174+
175+
for (int i = 0; i < args.Length; i++)
176+
{
177+
switch (args[i])
178+
{
179+
case "-s":
180+
if (i + 1 < args.Length)
181+
{
182+
database_server = args[i + 1];
183+
}
184+
else
185+
{
186+
Helper.LogHelper.Log(("Missing argument to -s.\n Supply argument as -s \"database server with port\"\n"));
187+
return;
188+
}
189+
break;
190+
case "-n":
191+
if (i + 1 < args.Length)
192+
{
193+
database_name = args[i + 1];
194+
}
195+
else
196+
{
197+
Helper.LogHelper.Log(("Missing argument to -n.\n Supply argument as -n \"database name\"\n"));
198+
return;
199+
}
200+
break;
201+
case "-u":
202+
if (i + 1 < args.Length)
203+
{
204+
database_username = args[i + 1];
205+
}
206+
else
207+
{
208+
Helper.LogHelper.Log(("Missing argument to -u.\n Supply argument as -u \"database username\"\n"));
209+
return;
210+
}
211+
break;
212+
case "-p":
213+
if (i + 1 < args.Length)
214+
{
215+
database_password = args[i + 1];
216+
}
217+
else
218+
{
219+
Helper.LogHelper.Log(("Missing argument to -p.\n Supply argument as -p \"database password\"\n"));
220+
return;
221+
}
222+
break;
223+
case "-path":
224+
if (i + 1 < args.Length)
225+
{
226+
backup_path = args[i + 1];
227+
}
228+
else
229+
{
230+
Helper.LogHelper.Log(("Missing argument to -path.\n Supply argument as -path \"backup path\"\n"));
231+
return;
232+
}
233+
break;
234+
}
235+
}
236+
if (string.IsNullOrEmpty(database_server))
237+
{
238+
Console.Write(("Missing argument -s.\n Supply argument -s \"database server with port\"\n"));
239+
return;
240+
}
241+
if (string.IsNullOrEmpty(database_name))
77242
{
78-
Helper.LogHelper.Log(string.Format("Error:The path you supply is not exist,path:{0}", path));
79-
return false;
243+
Console.Write(("Missing argument -n.\n Supply argument -n \"database name\"\n"));
244+
return;
245+
}
246+
if (string.IsNullOrEmpty(database_username))
247+
{
248+
Console.Write(("Missing argument -u.\n Supply argument -u \"database username\"\n"));
249+
return;
80250
}
81-
return true;
251+
if (string.IsNullOrEmpty(database_password))
252+
{
253+
Console.Write(("Missing argument -p.\n Supply argument -p \"database password\"\n"));
254+
return;
255+
}
256+
if (string.IsNullOrEmpty(backup_path))
257+
{
258+
Console.Write(("Missing argument -path.\n Supply argument -path \"backup path\"\n"));
259+
return;
260+
}
261+
262+
263+
264+
SqlConnectionString = string.Format(@"Server={0};Initial Catalog={1};Persist Security Info=False;User ID={2};Password={3};Connection Timeout=30;", database_server, database_name, database_username, database_password);
265+
266+
//backup database before upgrade
267+
Business.SQLServer.Backup(database_name, backup_path);
268+
82269
}
83270

84-
85271

86-
272+
/// <summary>
273+
/// Tool Instructions
274+
/// </summary>
275+
private static void PrintInstructions()
276+
{
277+
String inst = "Welcome to Lean-Soft SQLToolkit.\n" +
278+
"Provide command you want to run\n" +
279+
"---- Usage ----\n" +
280+
"runscripts [-s <database server>][-n <database name>][-u <database user>][-p <database password>][-path <sql scripts path>]\n" +
281+
"backup [-s <database server>][-n <database name>][-u <database user>][-p <database password>][-path <backup path>]";
282+
Console.WriteLine(inst);
283+
}
284+
87285

88286
}
89287
}

0 commit comments

Comments
 (0)