C#从数据库读取图片并保存的两种方法

首先我们需要了解以下两种从数据库读取图片并保存的方法:

  1. 将图片转换为二进制保存到数据库中,读取时再将二进制转换为图片;
  2. 在服务器本地保存图片,将本地图片路径保存到数据库中,读取时根据路径从本地读取图片。

下面我们逐一介绍这两种方法。

方法一:将图片转换为二进制保存到数据库中

1.1 保存图片到数据库

首先,我们需要将读取到的图片转换成二进制,然后将二进制数据存储到数据库中。在C#中,我们可以使用MemoryStreamBinaryWriter对象将图片转成二进制数据并保存到数据库中。示例代码如下:

using System.IO;
using System.Data.SqlClient;

// 读取本地图片转成二进制后保存到数据库中
public static void SaveImageToDatabase(string imagePath, int id)
{
    byte[] fileData = null;

    // 读取图片,并将二进制数据保存到 fileData 变量中
    using (FileStream fs = new FileStream(imagePath, FileMode.Open))
    {
        using (MemoryStream ms = new MemoryStream())
        {
            byte[] buffer = new byte[2048];
            int bytesRead;
            while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, bytesRead);
            }
            fileData = ms.ToArray();
        }

        // 将二进制数据保存到数据库中
        using (SqlConnection conn = new SqlConnection("数据连接字符串"))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand("INSERT INTO ImageTable (ID,ImageData) VALUES (@ID,@ImageData)", conn))
            {
                cmd.Parameters.AddWithValue("@ID", id);
                cmd.Parameters.AddWithValue("@ImageData", fileData);
                cmd.ExecuteNonQuery();
            }
        }
    }
}

1.2 从数据库中读取图片

当我们需要从数据库中读取图片时,我们先读取二进制数据,然后再将二进制数据转换为图片。在C#中,我们可以使用BinaryReaderMemoryStream对象将二进制数据转成图片。示例代码如下:

using System.IO;
using System.Data.SqlClient;
using System.Drawing;

// 从数据库中读取二进制数据并转成图片
public static Image GetImageFromDatabase(int id)
{
    byte[] fileData;
    using (SqlConnection conn = new SqlConnection("数据连接字符串"))
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand("SELECT ImageData FROM ImageTable WHERE ID=@ID", conn))
        {
            cmd.Parameters.AddWithValue("@ID", id);
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                if (reader.Read())
                {
                    fileData = (byte[])reader["ImageData"];
                    using (MemoryStream ms = new MemoryStream(fileData))
                    {
                        return Image.FromStream(ms);
                    }
                }
            }
        }
    }
    return null;
}

方法二:在服务器本地保存图片,将本地图片路径保存到数据库中

2.1 保存图片到本地

我们可以在服务器本地建立一个目录用于保存图片,然后将读取到的图片保存到该目录内。在C#中,我们可以使用File.Copy方法实现。示例代码如下:

using System.IO;

// 读取本地图片并保存到本地目录中
public static string SaveImageToLocal(string imagePath, string saveDir)
{
    // 生成保存文件的路径和文件名
    string fileName = Path.GetFileName(imagePath);
    string savePath = Path.Combine(saveDir, fileName);

    // 将文件拷贝到本地目录上
    File.Copy(imagePath, savePath, true);

    return savePath;
}

2.2 保存本地图片路径到数据库中

当我们需要将本地图片路径保存到数据库中时,我们可以使用方法一中介绍的方法将路径转换为二进制数据保存到数据库中。示例代码如下:

using System.IO;
using System.Data.SqlClient;

// 将本地图片路径保存到数据库中
public static void SaveImagePathToDatabase(string imagePath, int id)
{
    // 将路径转换成二进制数据
    byte[] fileData = Encoding.UTF8.GetBytes(imagePath);

    // 将二进制数据保存到数据库中
    using (SqlConnection conn = new SqlConnection("数据连接字符串"))
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand("INSERT INTO ImageTable (ID,ImagePathData) VALUES (@ID,@ImagePathData)", conn))
        {
            cmd.Parameters.AddWithValue("@ID", id);
            cmd.Parameters.AddWithValue("@ImagePathData", fileData);
            cmd.ExecuteNonQuery();
        }
    }
}

2.3 从数据库中读取本地图片路径

当我们需要从数据库中读取本地图片路径时,我们可以使用方法一中介绍的方法将二进制数据转换为路径。示例代码如下:

using System.IO;
using System.Data.SqlClient;

// 从数据库中读取本地图片路径
public static string GetImagePathFromDatabase(int id)
{
    byte[] fileData;
    using (SqlConnection conn = new SqlConnection("数据连接字符串"))
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand("SELECT ImagePathData FROM ImageTable WHERE ID=@ID", conn))
        {
            cmd.Parameters.AddWithValue("@ID", id);
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                if (reader.Read())
                {
                    fileData = (byte[])reader["ImagePathData"];
                    return Encoding.UTF8.GetString(fileData);
                }
            }
        }
    }
    return null;
}

这就是从数据库读取图片并保存的两种方法的完整攻略了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#从数据库读取图片并保存的两种方法 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • C#中的委托使用

    下面是关于C#中委托的详细使用攻略。 什么是委托? C#中的委托是一种类型,它允许将方法作为参数传递给其他方法,并且允许在方法之间创建一个链。委托类型定义了该委托所能关联的方法的签名。 如何定义一个委托? 委托的定义方式类似于定义一个方法。语法格式为:delegate 返回类型 委托类型名称(参数列表);。 其中,返回类型和参数列表决定了委托可以关联哪些方法…

    C# 2023年6月7日
    00
  • 关于C#基础知识回顾–反射(三)

    关于C#基础知识回顾–反射(三)这篇文章的完整攻略如下: 一、反射简介 1.1 反射的概念 反射(Reflection)是指在程序运行的时候访问、检测和修改程序集中的元数据和对象的方式。反射用于访问 .NET 中的元数据,这种元数据描述了程序集(assembly)、模块(module)和类型(type)等。通过元数据,我们可以获取类型信息,了解类的结构和成…

    C# 2023年6月1日
    00
  • 解读ASP.NET密码强度验证代码实例分享

    下面是“解读ASP.NET密码强度验证代码实例分享”的完整攻略: 一、引言 在开发 Web 应用程序中,密码必须经过加密以确保用户数据的安全。然而,如果密码过于弱,则会增加被破解的风险。ASP.NET 提供了一种简单的密码强度验证机制,可以帮助开发人员确保密码强度满足最低要求。 二、密码强度验证 密码强度验证可以通过 RegularExpressionVal…

    C# 2023年5月31日
    00
  • C# Path.GetTempPath()方法: 获取系统临时文件夹的路径

    Path.GetTempPath()是C#的一个方法,它的作用是获取当前操作系统的临时文件目录路径。这个方法返回一个字符串,表示当前操作系统的临时文件目录路径。这个路径可能因操作系统的不同而不同,例如在Windows系统中,临时文件路径一般是”C:\Users\username\AppData\Local\Temp”。 使用方法如下: string temp…

    C# 2023年4月19日
    00
  • C#动态执行批处理命令的方法

    C#可以通过Process类来执行批处理命令。但是Process类只能执行已知的静态命令。为了执行动态生成的命令,可以使用ProcessStartInfo的属性以及RedirectStandardInput和UseShellExecute方法组合来实现输入指令、执行命令的效果。 下面是两个示例: 示例一: 这个示例展示了如何使用Process类执行一个可操作…

    C# 2023年5月15日
    00
  • C#如何处理JSON

    当使用C#开发Web应用或其他需要使用API的系统时,通常需要处理JSON来交换数据。JSON是一种轻量级的数据格式,易于读写和解析。下面是一些使用C#处理JSON的方法。 第一步:导入Newtonsoft.Json库 使用C#处理JSON的其中一种方法是使用Newtonsoft.Json库,它是一个开源的JSON框架,可以方便地将JSON字符串解析为C#对…

    C# 2023年5月14日
    00
  • C#中Array与ArrayList用法及转换的方法

    下面就来详细讲解一下C#中Array与ArrayList用法及转换的方法。 一、Array用法 1. 创建Array 在C#中创建一个Array实际上就是创建一个固定大小的数组,可以通过以下方式来创建一个由5个整型元素组成的Array: int[] arr = new int[5]; 也可以通过对数组直接进行初始化的方式创建: int[] arr = {1,…

    C# 2023年6月7日
    00
  • MASAMinimalAPI:创建MinimalAPI项目

    项目准备 1.创建项目,选择webapi。取消勾选使用控制器。创建minimal Api项目 2.创建成功后MinimalAPI的接口直接写在program.cs中 3.引入nuget包:Masa.Contrib.Service.MinimalAPIs MinimalAPI改造 1. 在program.cs中加入以下内容 将原有的 var app = bui…

    C# 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部