最近的一个项目,需要在初始化时建库及建表,因为建表的SQL语句是从MySQL中导出的,所以在建库之后,需要执行导出的Sql语句实现建表及插入数据。方法如下:
/// <summary>
/// 执行Sql文件
/// </summary>
/// <param name="varFileName">sql文件</param>
/// <param name="Conn">连接字符串</param>
/// <returns></returns>
private bool ExecuteSqlFile(string varFileName, String Conn)
{
using (StreamReader reader = new StreamReader(varFileName, System.Text.Encoding.GetEncoding("utf-8")))
{
MySqlCommand command;
MySqlConnection Connection = new MySqlConnection(Conn);
Connection.Open();
try
{
string line = "";
string l;
while (true)
{
// 如果line被使用,则设为空
if (line.EndsWith(";"))
line = "";
l = reader.ReadLine();
// 如果到了最后一行,则退出循环
if (l == null) break;
// 去除空格
l = l.TrimEnd();
// 如果是空行,则跳出循环
if (l == "") continue;
// 如果是注释,则跳出循环
if (l.StartsWith("--")) continue;
// 行数加1
line += l;
// 如果不是完整的一条语句,则继续读取
if (!line.EndsWith(";")) continue;
if (line.StartsWith("/*!"))
{
continue;
}
//执行当前行
command = new MySqlCommand(line, Connection);
command.ExecuteNonQuery();
}
}
finally
{
Connection.Close();
}
}
return true;
}