您的位置:首页 > 数据库

c#一键初始化数据库

2015-12-02 16:04 323 查看
因为自己的项目需要,导入大批量的数据,就手写了一个mysql一键初始化的小程序,也遇到了很多多得问题,也请教了很多人,查了很多资料,今天把自己的代码贴出来和大家一起讨论,如果有写的不对的地方还原大家提出来!

本人自己看来,最主要的是要寻找到mysql的安装路径下bin目录下的mysql.exe文件,下面是部分代码,仅供参考:

第一部分:需找数据库安装路径

/// <summary>
/// 寻找数据库安装路径
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
#region 寻找mysql数据库的安装路径
OpenFileDialog path = new OpenFileDialog();
if (path.ShowDialog() == DialogResult.OK)
{
string a = path.FileName;
string dir = a.Substring(0, a.LastIndexOf("\\"));
InstallPath.Text = dir;
}
#endregion
}

第二部分:初始化
/// <summary>
/// 初始化事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
#region
string mysql = "mysql -u" + username.Text.ToString() + " -p" + password.Text.ToString() + " " + Databasename.Text.ToString() + "<";
string path = InstallPath.Text.ToString();
OpenFileDialog open1 = new OpenFileDialog();
using (FileStream fs = new FileStream("C:\\WINDOWS\\dxcon.ini", FileMode.OpenOrCreate, FileAccess.Read))
{
try
{
StreamReader read = new StreamReader(fs);
string uname = read.ReadLine().ToString();
string pwd = read.ReadLine().ToString();
InstallPath.Text = read.ReadLine().ToString();
fs.Close();
if (username.Text == "" || password.Text == "")
{
MessageBox.Show("请输入用户名或密码");
}
else if (username.Text != uname || password.Text != pwd)
{
MessageBox.Show("用户名或者密码错误,请核对!");
}
else
{
if (open1.ShowDialog() == DialogResult.OK)
{
mysql += open1.FileName;
try
{
DialogResult result = MessageBox.Show("您是否真的想初始化数据库吗?如果初始化会导致以前的数据库数据将丢失!!!", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (result == DialogResult.Yes)
{
//调用StartCmd方法
StartCmd(path, mysql);
//
MessageBox.Show("数据库" + Databasename.Text.ToString() + "初始化操作完成!");
}
else
{
MessageBox.Show("你已经取消初始化操作!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}

}
catch
{
}
}
#endregion
}

第三部分:cmd命令
/// <summary>
/// 执行cmd命令
/// </summary>
/// <param name="workingDirectory"></param>
/// <param name="command"></param>
public static void StartCmd(String workingDirectory, String command)
{
#region 调用cmd命令执行sql语句
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.WorkingDirectory = workingDirectory;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine(command);
p.StandardInput.WriteLine("exit");
#endregion
}

因为自己在测试的时候出现了一个问题:由于数据的过大,导致程序在初始化的时候会出现timeout的问题,所以我就修改了一些mysql的属性,具体代码:
第四部分:查询 /// <summary>
/// 修改数据库一些配置信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_Mo_Click(object sender, EventArgs e)
{
try
{
//创建一个数据库链接
MySqlConnection conn = new MySqlConnection();
//打开保存了用户名和密码的文件
FileStream fs = new FileStream("C:\\WINDOWS\\dxcon.ini", FileMode.OpenOrCreate, FileAccess.Read);
StreamReader read = new StreamReader(fs);
string user = read.ReadLine().ToString();
string password = read.ReadLine().ToString();
//从dxcon.ini中读取到数据库用户名和密码信息,进行验证登录!
string connStr = String.Format("server=localhost;user={0}; password={1}", user, password);
conn.ConnectionString = connStr;
conn.Open();
//显示需要所有以timeout结尾得信息
string sql = "show global variables like '%timeout';";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataAdapter sqlda = new MySqlDataAdapter(cmd);
if (cmd.ExecuteNonQuery() < 0)
{
DataSet ds = new DataSet();
sqlda.Fill(ds);
//将信息在绑定的DataGridView中显示
dataGridView1.DataSource = ds.Tables[0];
MessageBox.Show("请检查查询结果中interactive_timeout,net_read_timeout,net_write_timeout和wait_timeout的值是否为28800,因为所初始化的数据量过大,为避免出错,程序将会自动修改,请点击一键修改!");
}
else
{
MessageBox.Show("未查询到结果,请核对你的账号或者密码是否正确,如果账号密码正确,请检查你的Mysql是否安装正确!");
}
conn.Close();
}
catch
{
MessageBox.Show("Unknow Error !");
}
}第五部分:修改
/// <summary>
/// 一键修改事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>

private void Btu_modify_Click(object sender, EventArgs e)
{
try
{
MySqlConnection conn = new MySqlConnection();
FileStream fs = new FileStream("C:\\WINDOWS\\dxcon.ini", FileMode.OpenOrCreate, FileAccess.Read);
StreamReader read = new StreamReader(fs);
string user = read.ReadLine().ToString();
string password = read.ReadLine().ToString();
string connStr = String.Format("server=localhost;user={0}; password={1}", user, password);
conn.ConnectionString = connStr;
conn.Open();
string sql = "SET GLOBAL net_read_timeout=28800,net_write_timeout=28800,wait_timeout=28800,interactive_timeout=28800, max_allowed_packet=67108864;";
MySqlCommand cmd = new MySqlCommand(sql,conn);
conn.Close();
MessageBox.Show("自动修改成功,现在可以进行一键初始化!");
}
catch
{
MessageBox.Show("Unknow Error !");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息