栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

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

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

C# 二进制方式读写mysql示例 于@2021年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("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(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:UsersAdministratorsourcereposDapperBinTestaaa.jpg";

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

                    //获取程序根目录  例如:F:\项目源码\webbinDebugnetcoreapp2.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("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(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的,是我在研究试验阶段的痕迹。

引申

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

后记

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

Demo示例

ps: 如果帮到了较大的忙请打赏^^
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/984650.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号