SQL server 脚本自动转换成适合MySQL脚本的方法
本人新手小白一枚。刚实习两个星期,目前接触到的东西,比较迷茫,在此将自己实习过程学到的东西,简单做个总结,希望有路过的大佬,也可以指点指点。(其实这就是俺的一些笔记,应该叫做菜鸟实习第一天)
好了,开始代码。
第一步,先在IServices写上接口:
Task<string> release();//release为方法名
第二步,先在服务层Services写上方法:
此方法是将SQL server的列名、表数据分别查出来。再赋值给不同的参数。最后将数据拼接成适应MySQL的sql语句。
public List<string> DataTableToInsertSql(DataTable dt, string table)
{
List<string> result = new List<string>();
string cols = string.Join(",", dt.Columns.Cast<DataColumn>().Select(x => $"{x.ColumnName}").ToArray());//提取出列名
foreach (DataRow dr in dt.Rows)
{
var vals = string.Join(",", dr.ItemArray.Select(x =>//提取出表中数据(连接字符串)
{
if (DBNull.Value.GetType() == x.GetType())//判断是否为空,为空插入null值
{
return "null";
}
else
{
return $"'{x}'";
}
}).ToArray());
result.Add($"insert into {table} ({cols}) values({vals})");//将表名和数据拼接为mysql的语法
}
return result;
}
var sql = "select * from base_menu";
DataTable dt = await db.GetDataTableAsync(sql);
List<string> list_base_menu = DataTableToInsertSql(dt, "base_menu");// 其中DataTableToInsertSql为方法,调用此方法,此语句是将dt中查数据表,在此给它一个表名。
sql = "select * from base_module";
dt = await db.GetDataTableAsync(sql);
List<string> list_base_module = DataTableToInsertSql(dt, "base_module");
sql = "select * from base_modulebutton";
dt = await db.GetDataTableAsync(sql);
List<string> list_base_modulebutton = DataTableToInsertSql(dt, "base_modulebutton");
StringBuilder sb = new StringBuilder();
//循环
foreach (string s1 in list_base_menu)
{
sb.Append(s1+";\r\n");
}
foreach (string s2 in list_base_module)
{
sb.Append(s2 + ";\r\n");
}
foreach (string s3 in list_base_modulebutton)
{
sb.Append(s3 + ";\r\n");
}
string content = sb.ToString();
string rootPath = Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot/tempfiles/sqlscript.sql");//文件保存路径(将文件保存在网站上)
try
{
if (!System.IO.File.Exists(rootPath))
{
DirFileHelper.CreateFileContent(rootPath, content);
}
else // 测试用
{
DirFileHelper.CreateFileContent(rootPath, content);
}
}
catch (Exception)
{
throw;
}
return rootPath;
这样一段完成的,将Mysql脚本转换成SQL server脚本的方法就写好了。
这个代码也是公司员工教的,我自己呢,也是半懂半不懂。还得继续努力啊友友们