C#Winform使用mysql作为本地数据库
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作为本地数据库的更多相关文章
- 错误解决记录------------mysql连接本地数据库显示"can't get hostname for your address"
mysql连接本地数据库遇到 can't get hostname for your address 不明原因的本地mysql数据库连接不上,总是显示can't get hostname for yo ...
- MySQL 连接本地数据库、远程数据库命令
一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格) C:/>mysql -h localhost -u root -p123 二. ...
- MySQL连接本地数据库时报1045错误的解决方法
navicat for MySQL 连接本地数据库出现1045错误 如下图: 说明连接mysql时数据库密码错误,需要修改密码后才可解决问题: 解决步骤如下: .首先打开命令行:开始->运行 ...
- navicat for MySQL连接本地数据库时报1045错误的解决方法
navicat for MySQL 连接本地数据库出现1045错误 如下图: 说明连接mysql时数据库密码错误,需要修改密码后才可解决问题: 解决步骤如下: 1.首先打开命令行:开始->运行- ...
- navicat for mysql连接本地数据库
navicat for mysql连接本地数据库 打算使用navicat连接本地数据库,连接的时候,一直连接不上.然后猜想是不是本地数据库没有设置好.输入mysql,出错内容:access denie ...
- 使用Navicat for MySQL把本地数据库上传到服务器
服务器系统基本都是基于linux的,这个数据库上传的方式适用于linux的各种版本,比如Ubuntu和Centos(尽管这两个版本各种大坑小坑,但至少在数据库传输上保持了一致性) 当然本地数据库上传到 ...
- Mysql安装本地数据库
1.下载解压:https://dev.mysql.com/downloads/mysql/ 2.配置环境变量path: D:\workPrograms\mysql-8.0.16-winx64\bin ...
- MySQL把本地数据库上传到linux
今天是要导入数据库到linux系统 先用Navicat把sql导出,然后登陆到linux去执行 登陆mysql: mysql -uroot -p123456 创建数据库:create database ...
- mysql mysqldump 本地数据库导入本地数据库的命令
C:\Users\Administrator>mysqldump -h localhost -P 3306 -u root -proot -n -R --triggers foryou |mys ...
随机推荐
- Chrome development tools学习笔记(5)
调试JavaScript 随着如今JavaScript应用的越来越广泛,在面对前端工作的时候,开发人员须要强大的调试工具来高速有效地解决这个问题.我们文章的主角,Chrome DevTools就提供了 ...
- or1200处理器的异常处理类指令介绍
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 我们在计算机体系结构的学习中知道:中断实质上包含由外部事件引起的硬中断(又称外中断)和由内部预先安排的特定指令或内部异常引起的软中断 ...
- Nginx干货(二)配置详解
此篇就不矫情了.直接上个配置吧.以后若有更新,继续修补 /usr/local/nginx/conf目录下面的nginx.conf文件 以用户nginx的身份来运行 user nginx; 启动进程,通 ...
- java.lang.NoSuchMethodError: com.itextpdf.text.pdf.PdfDiv.setKeepTogether(Z)V
用com.itextpdf.text.Document打印pdf报错 时间:2017-06-22 12:23:39,594 - 级别:[ERROR] - 消息: [other] Servlet.ser ...
- atom添加eslint插件
在atom编辑器里添加插件,操作步骤如下:以atom-ide-vue插件为例 //切换到插件目录cd /Users/name/.atom/packages //将需要下载插件的源代码拉下来git cl ...
- .net WCF简单实例
最近看到网上招聘有许多都需要WCF技术的人员,我之前一直没接触过这个东西,以后工作中难免会遇到,所谓笨鸟先飞,于是我就一探究竟,便有了这边文章.由于是初学WCF没有深入研究其原理,只是写了一个demo ...
- 【java】io流之字节输入流:java.io.InputStream类及子类java.io.FileInputStream
package 文件操作; import java.io.File; import java.io.FileInputStream; import java.io.IOException; impor ...
- 【java】io流之字符输入流:java.io.Reader类及子类的子类java.io.FileReader
package 文件操作; import java.io.File; import java.io.FileReader; import java.io.IOException; import jav ...
- java并发编程的艺术——第五章总结(Lock锁与队列同步器)
Lock锁 锁是用来控制多个线程访问共享资源的方式. 一般来说一个锁可以防止多个线程同时访问共享资源(但有些锁可以允许多个线程访问共享资源,如读写锁). 在Lock接口出现前,java使用synchr ...
- Libevent源码分析 (1) hello-world
Libevent源码分析 (1) hello-world ⑨月份接触了久闻大名的libevent,当时想读读源码,可是由于事情比较多一直没有时间,现在手头的东西基本告一段落了,我准备读读libeven ...