首页 > 数据库 >.net core 从数据库读取图片和保存图片到数据库

.net core 从数据库读取图片和保存图片到数据库

时间:2023-03-16 17:33:12浏览次数:50  
标签:core string mycomm 数据库 emp using new Image 图片

using Microsoft.Data.SqlClient;
using System.Data;

namespace PhotoApp;

internal class PhotoHelper
{
    string createTableSql = @"CREATE TABLE [dbo].[Employee](
                             [emp_id] [int] NOT NULL,
                             [emp_name] [varchar](50) NOT NULL,
                             [emp_image] [image] NULL
                         ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]";
    string connectionString = "Server=192.168.10.xxx;User Id=xxx;Password=xxx;Database=TestPhoto;Trusted_Connection=false;TrustServerCertificate=True";
    public string getPhotoPath = @"D:\Dragon.png";
    public string savePhotoPath = @"D:\test.png";
    public void SavePhotoToSqlServer()
    {
        using (SqlConnection sqlConnection = new SqlConnection(connectionString))
        {
            FileInfo finfo = new FileInfo(getPhotoPath);
            byte[] btImage = new byte[finfo.Length];
            FileStream fStream = finfo.OpenRead();
            fStream.Read(btImage, 0, btImage.Length);
            fStream.Close();
            using (SqlCommand sqlCommand = new SqlCommand(
                  "INSERT INTO Employee (emp_id, emp_name, emp_image) VALUES(@emp_id, @emp_name, @emp_image)",
                  sqlConnection))
            {
                sqlCommand.Parameters.AddWithValue("@emp_id", 2);
                sqlCommand.Parameters.AddWithValue("@emp_name", "Employee Name");
                SqlParameter imageParameter = new SqlParameter("@emp_image", SqlDbType.Image);
                imageParameter.Value = btImage;
                sqlCommand.Parameters.Add(imageParameter);
                sqlConnection.Open();
                sqlCommand.ExecuteNonQuery();
                sqlConnection.Close();
            }
        }
    }

    public string createTableSql2 = @"CREATE TABLE [dbo].[ImageFile](
                                        [Id] [UNIQUEIDENTIFIER] NOT NULL,
                                        [Name] [NVARCHAR](200) NULL,--文件名
                                        [Type] [NVARCHAR](50) NULL,--文件类型
                                        [Image] [IMAGE] NULL--文件
                                    )";
    public void SaveBulkPhotosToSqlServer()
    {
        using (SqlConnection myconn = new SqlConnection(connectionString))
        {
            myconn.Open();
            using (SqlCommand mycomm = new SqlCommand())
            {
                DirectoryInfo dir = new DirectoryInfo(savePhotoPath);
                foreach (FileInfo item in dir.GetFiles("*.png"))//循环读取文件夹内的png文件
                {
                    //var pic = getJpgSize(item.FullName);
                    string str = string.Format("insert into ImageFile (Id,Name,Type,Image) values('{0}','{1}','{2}',@Image)", Guid.NewGuid().ToString(), Path.GetFileNameWithoutExtension(item.FullName), item.Extension.Substring(1));//插入数据
                    mycomm.CommandText = str;
                    mycomm.Connection = myconn;
                    FileStream fs = new FileStream(item.FullName, FileMode.Open);
                    BinaryReader br = new BinaryReader(fs);
                    Byte[] byData = br.ReadBytes((int)fs.Length);
                    fs.Close();
                    mycomm.Parameters.Add("@Image", SqlDbType.Binary, byData.Length);
                    mycomm.Parameters["@Image"].Value = byData;
                    mycomm.ExecuteNonQuery();
                    mycomm.Parameters.Clear();
                }
            }
        }
    }

    public void ReadPhotoFromSqlServer(int userId)
    {
        using (SqlConnection sqlconnection = new SqlConnection(connectionString))
        {
            sqlconnection.Open();
            string sqlQuery = string.Format(@"Select [emp_image] From [Employee] Where [emp_id]={0}", userId);

            // Read Image Value from Sql Table 
            SqlCommand sqlCommand = new SqlCommand(sqlQuery, sqlconnection);            
            using (SqlDataReader reader = sqlCommand.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    //声明一字节数组   将数据库中的图片现存入字节数组中
                    byte[] imageByte;
                    //在这我是知道里面就一张图,所以这么写的,个人根据实际情况,可做修改
                    while (reader.Read())
                    {
                        //将图片转换为字节数组
                        imageByte = (byte[])reader["emp_image"];
                        //转换为文件流
                        MemoryStream ms = new MemoryStream(imageByte);
                        ms.Seek(0, SeekOrigin.Begin);
                        using (var output = File.OpenWrite(savePhotoPath))
                        {
                            ms.CopyTo(output);
                        }

                        ////再将文件流转换为图像
                        //Bitmap bitmap = new Bitmap(stream);
                        //pictureBox1.Image = bitmap;
                    }
                }
            }
        }
    }

    public void SaveImageFromBase64(string base64string)
    {
        byte[] b = Convert.FromBase64String(base64string);
        //实际情况需要根据base64判断文件后缀名
        string path = Path.Combine(savePhotoPath, "test", "abc.jpg");
        File.WriteAllBytes(path, b);
    }
}

 

参考资料:

Saving an Image to SQL Server - CodeProject

SQLserver用Image格式储存图片 - Murphy丶悦 - 博客园 (cnblogs.com)

关于c#:将MemoryStream转换为FileStream时FileStream数据不完整 | 码农家园 (codenong.com)

标签:core,string,mycomm,数据库,emp,using,new,Image,图片
From: https://www.cnblogs.com/hellowzl/p/17223527.html

相关文章

  • 通俗易懂的理解什么是数据库
    ⼀、数据库介绍(⼀)、什么是数据库数据库(database)就是存储数据的仓库。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有不同的API⽤于创......
  • [EF Core] 多线程执行SQL Command
     publicclassXXXRepository{//数据库上下文privateXXXDBContextcontext;//作用域服务工厂privatereadonlyIServiceScopeFactory_servic......
  • Django模型(数据库)
    Django模型Django对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。Django为这些数据库提供了统一的调用API,可按需选择不同数据库。Django模型使用......
  • [[email protected]].Elbie后缀勒索软件解密|数据库恢复
    1.后缀[[email protected]].Elbie勒索软件介绍?[[email protected]].Elbie勒索软件是一种恶意软件,该勒索软件是Phobos家族的一部分。它会加密文件以使其无......
  • Sitecore DI
    依賴注入通過showconfig.aspx工具查看可參考系統自帶的配置文件寫法:<siteroot>\App_Config\Sitecore\ExperienceForms\Sitecore.ExperienceForms.Mvc.config<sitec......
  • uni-app 实现图片主题色的获取
    uni-app实现图片主题色的获取<canvascanvas-id="getImageThemeColorCanvas"id="getImageThemeColorCanvas"></canvas>canvas元素默认宽为300,高为150。需要注意的......
  • 20212323严文霞--数据库读书笔记一(P3-P18,P31-P33)
    1.1数据库系统概述1.1.1数据库的4个基本概念数据(data)定义:描述事物的符号记录称为数据。数据有多种表现形式,例如数字、文字、图形、图像、音视频等;数据需要进行解......
  • 数据库同步,MongoDB、ES,寻求免费的可写入型的ODBC驱动
    大家好,我们开发的数据库同步软件DBSync,能同步多种数据库,支持增量同步、异构同步。但对于NoSQL的MongoDB,Elasticsearch,一直有个问题:官方的ODBC驱动只能读数据库,不能写数据......
  • GPT-4测评,大家先别急,图片输入还没来
    昨天GPT-4朋友圈刷屏,我更新了一篇小文章,极简罗列GPT-4的一些情报:1ChatGPTPlus用户才可试用GPT-42试用阶段每四小时最多100条信息3知识库还是2021年4上下文长度为8......
  • 查看图片真实格式
    如jpg格式,它的图像数据结构中,最前面2个字节是一个固定取值0xFFD8,第三个字节一般也是固定0xFF。如png格式,它的图像数据结构中,最前面8个字节就是PNG文件署名域,可以很好的标......