MYSQL是老牌关系型数据库,在受够了sqlite,mslocaldb,sqlce等本地数据库之后,发现了mysql5.6的一些版本也可以绿色安装,编程实现从资源文件里面解压到目标机器上,并配置好成为本机系统服务。并且EF的mysql驱动对code first支持非常好。于是探索出了用mysql来做本地数据库的方法。

my.ini配置

[client]
port=3308
[mysql]
default-character-set=gbk [mysqld]
port=3308
basedir="%BaseDir%"
datadir="%BaseDir%data/"
character-set-server=gbk
default-storage-engine=MyISAM
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=512 query_cache_size=0
table_cache=256
tmp_table_size=18M thread_cache_size=8
myisam_max_sort_file_size=64G
myisam_sort_buffer_size=35M
key_buffer_size=25M
read_buffer_size=256K
read_rnd_buffer_size=64M
sort_buffer_size=256M innodb_additional_mem_pool_size=24M innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=12M innodb_buffer_pool_size=47M
innodb_log_file_size=24M
innodb_thread_concurrency=8

从资源文件里面解压mysql

/// <summary>
/// 检查MySQL服务是否运行,如果没有安装MySQL自动解压并初始化
/// </summary>
private static void InitMysqlService()
{
WaitUI.WorkMessage = "第一次使用系统,正在初始化本地数据库...";
byte[] zipfile = (byte[])Properties.Resources.ResourceManager.GetObject("MySQLx86");
System.IO.File.WriteAllBytes("MySQLx86.zip", zipfile);
UnZip("MySQLx86.zip", "", "", true);
#region 初始化MySQL
try
{
string physicalRoot = AppDomain.CurrentDomain.BaseDirectory + "MySQLx86\\";
//1.修改my.ini配置 为防止本机已装mysql,特修改my.ini中端口号为3308
string iniFile = System.IO.File.ReadAllText(physicalRoot + "my.ini");
iniFile = iniFile.Replace("%BaseDir%", physicalRoot.Replace("\\", "/")); //%BaseDir%为my.ini中自定义的目录参数
System.IO.File.WriteAllText(physicalRoot + "my.ini", iniFile);
//2.创建win服务
string info1 = Execute(physicalRoot + "bin\\mysqld.exe" + " install MySQLd --defaults-file=\"" + physicalRoot + "my.ini\"", );
Debug.WriteLine(info1);
//3.启动服务
string info2 = Execute("net start MySQLd", );
Debug.WriteLine(info2);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
finally
{
System.IO.File.Delete("MySQLx86.zip");
ServiceController serviceController = ServiceController.GetServices().Where(sc => sc.ServiceName.Equals("MySQLd")).FirstOrDefault();
if (serviceController != null && serviceController.Status != ServiceControllerStatus.Running)
{
serviceController.Start();
}
}
#endregion
}
/// <summary>
/// 解压文件
/// </summary>
/// <param name="zipedFile"></param>
/// <param name="strDirectory"></param>
/// <param name="password"></param>
/// <param name="overWrite"></param>
private static void UnZip(string zipedFile, string strDirectory, string password, bool overWrite)
{
if (strDirectory == "")
strDirectory = Directory.GetCurrentDirectory();
if (!strDirectory.EndsWith("\\"))
strDirectory = strDirectory + "\\";
using (ZipInputStream s = new ZipInputStream(System.IO.File.OpenRead(zipedFile)))
{
s.Password = password;
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = "";
string pathToZip = "";
pathToZip = theEntry.Name;
if (pathToZip != "")
directoryName = Path.GetDirectoryName(pathToZip) + "\\";
string fileName = Path.GetFileName(pathToZip);
Directory.CreateDirectory(strDirectory + directoryName);
if (fileName != "")
{
if ((System.IO.File.Exists(strDirectory + directoryName + fileName) && overWrite) || (!System.IO.File.Exists(strDirectory + directoryName + fileName)))
{
using (FileStream streamWriter = System.IO.File.Create(strDirectory + directoryName + fileName)) {
int size = ;
byte[] data = new byte[];
while (true)
{
size = s.Read(data, , data.Length);
if (size > )
streamWriter.Write(data, , size);
else
break;
}
streamWriter.Close();
}
}
}
}
s.Close();
}
}

C#Winform使用mysql作为本地数据库的更多相关文章

  1. 错误解决记录------------mysql连接本地数据库显示"can't get hostname for your address"

    mysql连接本地数据库遇到 can't get hostname for your address 不明原因的本地mysql数据库连接不上,总是显示can't get hostname for yo ...

  2. MySQL 连接本地数据库、远程数据库命令

    一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格) C:/>mysql -h localhost -u root -p123 二. ...

  3. MySQL连接本地数据库时报1045错误的解决方法

     navicat for MySQL 连接本地数据库出现1045错误 如下图:  说明连接mysql时数据库密码错误,需要修改密码后才可解决问题: 解决步骤如下: .首先打开命令行:开始->运行 ...

  4. navicat for MySQL连接本地数据库时报1045错误的解决方法

    navicat for MySQL 连接本地数据库出现1045错误 如下图: 说明连接mysql时数据库密码错误,需要修改密码后才可解决问题: 解决步骤如下: 1.首先打开命令行:开始->运行- ...

  5. navicat for mysql连接本地数据库

    navicat for mysql连接本地数据库 打算使用navicat连接本地数据库,连接的时候,一直连接不上.然后猜想是不是本地数据库没有设置好.输入mysql,出错内容:access denie ...

  6. 使用Navicat for MySQL把本地数据库上传到服务器

    服务器系统基本都是基于linux的,这个数据库上传的方式适用于linux的各种版本,比如Ubuntu和Centos(尽管这两个版本各种大坑小坑,但至少在数据库传输上保持了一致性) 当然本地数据库上传到 ...

  7. Mysql安装本地数据库

    1.下载解压:https://dev.mysql.com/downloads/mysql/ 2.配置环境变量path: D:\workPrograms\mysql-8.0.16-winx64\bin ...

  8. MySQL把本地数据库上传到linux

    今天是要导入数据库到linux系统 先用Navicat把sql导出,然后登陆到linux去执行 登陆mysql: mysql -uroot -p123456 创建数据库:create database ...

  9. mysql mysqldump 本地数据库导入本地数据库的命令

    C:\Users\Administrator>mysqldump -h localhost -P 3306 -u root -proot -n -R --triggers foryou |mys ...

随机推荐

  1. dict.get()和dict['key']的区别

    a ={'name':'xxxx'} 1.a.get('gender') :如果不存在则返回一个默认值,如果设置了则返回默认的值,没有设置就返回None 2.a['gender'] :只能获取存在的值 ...

  2. 用maven搭建java ee项目

    一.开发环境 jdk1.7  tomcat7 eclipse-jee-luna-R-win32 maven2.2.1 二搭建步骤 1.点击File->New->Other,选择maven ...

  3. poj 2034 Anti-prime Sequences(dfs)

    //相邻的 2.3......d 之和都要不为素数 # include <algorithm> # include <stdio.h> using namespace std; ...

  4. Shiro学习(一)总体介绍

    1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...

  5. mybatis插入实体到数据库后获取自增的主键

    话不多说,直接说方法. 1.在insert语句中加入如下的代码. <insert id="insertSelective" parameterType="com.q ...

  6. springboot小技巧(转)

    一些springboot小技巧.小知识点 初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用Jpa,另外一种是Spring JDBC.两种方式各有区别下面 ...

  7. css自动添加浏览器兼容前缀 autoprefixer设置

    Autoprefixer设置: preferences>key Bindings-Users {"keys":["ctrl+alt+x"],"c ...

  8. vue2.0---vue-router总结(项目基于vue-cli)

    vue2.0---vue-router总结(项目基于vue-cli) 1. 在项目中安装: npm install vue-router --save 2. 在项目中的引入: // The Vue b ...

  9. 【java】HashMap、Map、Set、HashMap.put()、HashMap.keySet()、HashMap.entrySet()、Map.Entry内部类

    package com.tn.hashMap; public class Student { private String id; private String name; public Studen ...

  10. 【python】局部变量和全局变量