0
点赞
收藏
分享

微信扫一扫

C#二进制方式(binary、varbinary、blob、longblog等)读写mysql


C# 二进制方式读写mysql示例​于@2021年8月16日亲测成功​

(binary、varbinary、blob、longblog等)

环境

mysql 5.7
.NET5 控制台项目
​​​特别提一下,使用了Dapper库,因为比较好用​

表结构如下图:

C#二进制方式(binary、varbinary、blob、longblog等)读写mysql_mysql blob


.net项目依赖如下:

C#二进制方式(binary、varbinary、blob、longblog等)读写mysql_mysql blob_02

主要部分代码示例

​StringBinary.cs, 将字符串转成二进制,存入; 从二进制中取出内容,转为字符串​

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Dapper;

using MySql.Data.MySqlClient;

namespace DapperBinTest
{
public class StringBinary
{

public static string str1 = "山高路远沟深,大军纵横驰奔;谁敢横刀立马,唯我彭大将军。";

public static int SaveStringByte()
{
try
{
using (IDbConnection db = new MySqlConnection(Conn.connStrDefault))
{
byte[] byteArray = Encoding.Default.GetBytes(str1);

var text = str1 + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

string sqlQuery = "Insert Into test1 (text,bin) Values(@text,@bin)";

DynamicParameters pars = new DynamicParameters();
pars.Add("text", text);
pars.Add("bin", byteArray);

int rowsAffected = db.Execute(sqlQuery, pars);

if (rowsAffected > 0)
{
int pk = db.Query<int>("SELECT LAST_INSERT_ID()").FirstOrDefault();
Console.WriteLine($"字符串转二进制插入成功,pk = {pk}");
return pk;
}
return 0;
}

}
catch (Exception e)
{
Console.WriteLine(e.Message);
return 0;
}
}


public static void ReadStringByte(int pk)
{
try
{
using (IDbConnection db = new MySqlConnection(Conn.connStrDefault))
{
string sqlQuery = $"select * from test1 where id = {pk}";

Test1 test1 = db.Query<Test1>(sqlQuery).ToList().FirstOrDefault();

if (null != test1)
{
Console.WriteLine($"从mysql读取二进制内容成功, text = {test1.text}, bin.Length = {test1.bin.Length}");

string str = Encoding.Default.GetString(test1.bin);

Console.WriteLine($"从mysql读取二进制内容成功, text = {test1.text}, bin.Text = {str}");
}
}

}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}


}
}

​FileBinary.cs 将文件转为二进制,存储;将二进制内容读出,转换为文件存储在本地​

using System;
using System.Data;
using System.IO;
using System.Linq;
//----引入必要的命名空间
using Dapper;

using MySql.Data.MySqlClient;

namespace DapperBinTest
{
public class FileBinary
{

public static string path = @"C:\Users\Administrator\source\repos\DapperBinTest\aaa.jpg";

public static int SaveFileByte()
{
try
{
using (IDbConnection db = new MySqlConnection(Conn.connStrDefault))
{

//获取程序根目录 例如:F:\\项目源码\\web\bin\Debug\netcoreapp2.2
string basePath = AppContext.BaseDirectory;


byte[] byteArray = File.ReadAllBytes(path);

var text = path + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

string sqlQuery = "Insert Into test1 (text,bin) Values(@text,@bin)";

DynamicParameters pars = new DynamicParameters();
pars.Add("text", text);
pars.Add("bin", byteArray);

int rowsAffected = db.Execute(sqlQuery, pars);

if (rowsAffected > 0)
{
int pk = db.Query<int>("SELECT LAST_INSERT_ID()").FirstOrDefault();
Console.WriteLine($"文件转二进制插入成功,pk = {pk}");
return pk;
}
return 0;
}

}
catch (Exception e)
{
Console.WriteLine(e.Message);
return 0;
}
}


public static void ReadFileByte(int pk)
{
try
{
using (IDbConnection db = new MySqlConnection(Conn.connStrDefault))
{

string sqlQuery = $"select * from test1 where id = {pk}";

Test1 test1 = db.Query<Test1>(sqlQuery).ToList().FirstOrDefault();

if (null != test1)
{
Console.WriteLine($"从mysql读取文件内容成功, text = {test1.text}, bin.Length = {test1.bin.Length}");

string basePath = AppContext.BaseDirectory;
var ext = Path.GetExtension(path);
var guid = Guid.NewGuid().ToString();

string newPath = Path.Combine(basePath, guid + ext);

StreamToFile(test1.bin, newPath);

Console.WriteLine($"从mysql读取文件内容成功, text = {test1.text}, bin.path = {path}");
}
}

}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}

public static int StreamToFile(byte[] photo, string newPath)//反向转换
{
byte[] bytes = photo;
FileStream fs = new FileStream(newPath, FileMode.Create, FileAccess.Write);
fs.Write(bytes, 0, bytes.Length);
fs.Flush();
fs.Close();
return 0;
}
}

}

​Main方法,你懂的​

namespace DapperBinTest
{
class Program
{

static void Main(string[] args)
{
//字符串转二进制,写入mysql
//StringBinary.SaveStringByte();

//从mysql中读取二进制字符串,并转换为普通字符串
//StringBinary.ReadStringByte(13);

//文件转为二进制,写入mysql成功
//int v = FileBinary.SaveFileByte();

//从mysql中读取二进制文件,并转换为普通文件存储到本地。
FileBinary.ReadFileByte(14);

}
}
}

示例图

上个图,证明真的成功了。

上面几行二进制内容为NULL的,是我在研究试验阶段的痕迹。

C#二进制方式(binary、varbinary、blob、longblog等)读写mysql_二进制读写mysql_03

引申

尽管这个字段是 ​​blob​​​,但其他的一些类型,如 ​​binary​​​、​​longblob​​​等,与​​blob​​​只是长度的不同,用法都一样。
不再重复。
截至目前的内容,都亲测成功。

后记

我的Demo 地址,下载后可以直接用 Visual Studio 2019等打开( .NET 5环境,你也可以自己换.net framework 或 .net core版本,很好调整)

​​Demo示例​​


举报

相关推荐

0 条评论