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. 【new File(String Path)加载资源问题】

    2017-12-17   15:07:38  [原创-wx] 一.我们在用IO流加载资源的时候,创建文件资源 1 File file = New File("String Path" ...

  2. 关于Mysql下使用Dapper QueryFirstOrDefault的问题

    1.环境 MySql:5.7.20 Dapper:1.50.2 .Net:4.5 2.遇到的问题 在开发中我发现,使用Dapper查询数据时,第一次查询正确,第二次查询就差不出来,或者直接修改数据库后 ...

  3. POJ 2195Going Home(网络流之最小费用流)

    题目地址:id=2195">POJ2195 本人职业生涯费用流第一发!!快邀请赛了.决定还是多学点东西.起码碰到简单的网络流要A掉.以后最大流费用流最小割就一块刷. 曾经费用流在我心目 ...

  4. codeforces 558 E A Simple Task

    题目大意就是给一个字符串,然后多个操作.每次操作能够把每一段区间的字符进行升序或者降序排序,问终于的字符串是如何的. 做法的话就是用线段树维护区间和 一開始仅仅考虑字符串中字符'a'的情况.如果操作区 ...

  5. 自学Python4.2 迭代器、生成器

    迭代器.生成器一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么, 因为人们很少在迭代途中往后退.另外 ...

  6. 利用AndroidStudio开发java工程

    1.新建一个project,或者如果你已经有project的话,那就直接新建一个module.注意选择Java library,然后下一步. 2.输入module的一些信息.点击finish.(在创建 ...

  7. Idea在导入有maven项目时,不能自动识别pom.xml

    当在idea中导入maven项目时,不能自动识别pom文件,显示为普通橙色xml文件. 解决方法:点击最右侧侧边栏,点击添加(蓝的的小加号),选择你导入项目的pom.xml文件

  8. dubbo2.5.6从下载到编译成功并且部署成功过程

    本文基于dubbo2.5.6版本 原文链接:http://www.cnblogs.com/zhuwenjoyce/       1,下载dubbo 首先从 github 下载源代码并阅读 readme ...

  9. 【python】内部函数

  10. 【二十一】基于mysqli的表格数据练习

    mysqlitest.php <?php //调用数据库的函数 function connetionsql(){ $conn=mysqli_connect("127.0.0.1&quo ...