2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C#二进制方式(binary varbinary blob longblog等)读写mysql

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

时间:2023-09-04 20:54:20

相关推荐

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

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

(binary、varbinary、blob、longblog等)

环境

mysql 5.7

.NET5 控制台项目

特别提一下,使用了Dapper库,因为比较好用

表结构如下图:

.net项目依赖如下:

主要部分代码示例

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.2string 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 = bine(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的,是我在研究试验阶段的痕迹。

引申

尽管这个字段是blob,但其他的一些类型,如binarylongblob等,与blob只是长度的不同,用法都一样。

不再重复。

截至目前的内容,都亲测成功。

后记

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

Demo示例

ps: 如果帮到了较大的忙请打赏^^

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。