试试这个检查错误:
List<string> query = new List<string>(){
"SET SQL_MODE= 'NO_AUTO_VALUE_ON_ZERO';",
string.Format("CREATE DATABASE `{0}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;", dbName),
string.Format("USE `{0}`;", dbName)}; // error string.Format("USE `{0}`;{1}", dbName)
/*
using (StreamReader reader = File.OpenText("C:\b.sql"))
{
while (reader.Peek() >= 0)
query.Add(reader.ReadLine());
}
*/
using (StreamReader reader = File.OpenText("C:\b.sql"))
{
string lines = reader.ReadToEnd();
string[] alines = lines.Split(';');
foreach(string q in alines)
query.Add(q);
}
foreach (string command in query)
{
try
{
using (MySqlCommand c = new MySqlCommand(command, conn))
{
c.ExecuteReader();
Console.WriteLine(string.Format("OK Command: {0}", command));
}
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Error: {0}. Command: {1}", ex.Message, command));
break;
}
}
编辑
为了获得更好的性能,您可以使用此类。我没试过,希望效果好:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.IO;
namespace MySQLHelperTest
{
public class MySQLTestingQuery
{
public MySqlConnection MyConnection { get; set; }
public string FileSql { get; set; }
public List<string> PreviousQuerys { get; set; }
public List<string> CorrectQuerys { get; private set; }
public string ErrorQuery { get; private set; }
public MySQLTestingQuery()
{
this.CorrectQuerys = new List<string>();
this.ErrorQuery = string.Empty;
}
public void Start()
{
FileInfo file = new FileInfo(this.FileSql);
if (!file.Exists)
throw new ApplicationException(string.Format("nonexistent file: '{0}'", this.FileSql));
if (this.PreviousQuerys != null)
foreach (string command in this.PreviousQuerys)
this.RunMySQLCommand(command);
try
{
foreach (string command in this.ReadQuerys(this.FileSql))
Console.WriteLine(command);
}
catch (ApplicationException ex)
{
throw ex;
}
catch (Exception ex)
{
throw new ApplicationException(string.Format("an unexpected error happened: {0}. ", ex.Message));
}
}
private void RunMySQLCommand(string command)
{
try
{
using (MySqlCommand c = new MySqlCommand(command, this.MyConnection))
{
c.ExecuteReader();
this.CorrectQuerys.Add(command);
}
}
catch (Exception ex)
{
this.ErrorQuery = command;
throw new ApplicationException(string.Format("error: {0}. command: {1}", ex.Message, command));
}
}
private IEnumerable<string> ReadQuerys(string file)
{
using (StreamReader sr = new StreamReader(file))
{
string query = string.Empty;
while (sr.Peek() >= 0)
{
query += (char)sr.Read();
if (query.EndsWith(";"))
{
yield return query;
query = string.Empty;
}
}
}
}
}
}