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

yizhihongxing

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

  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日

相关文章

  • mybatis多数据源动态切换的完整步骤

    下面是使用MyBatis多数据源动态切换的完整攻略。 1. 添加依赖 在pom.xml文件中添加MyBatis和连接池的依赖,例如: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-s…

    C# 2023年6月1日
    00
  • 深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解

    下面是对“深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解”的完整攻略: 简介 在多线程编程中,一些同步构造往往是必需的,以便协调不同线程之间的操作,避免出现竞态条件等问题。这篇文章将介绍用Wait和Pulse模拟一些同步构造的方法。 Wait和Pulse概述 Wait和Pulse是.NET Framework中用于协调同步操作的两个重要方法。…

    C# 2023年6月7日
    00
  • C#基础:基于const与readonly的深入研究

    C#基础:基于const与readonly的深入研究 介绍 在C#中,常量是指在编译时就已经确定并且不可更改的值,常量有两种:const和readonly。两者看起来很相似,但是它们在实现上有一些区别。在本文中,我们将深入探讨const和readonly的异同点,并且提供一些使用示例帮助您更好地理解这两种常量。 readonly 定义 readonly关键字…

    C# 2023年6月1日
    00
  • C#调用SQL Server中有参数的存储过程

    下面是“C#调用SQL Server中有参数的存储过程”的完整攻略。 1. 准备工作 在 C# 中调用 SQL Server 中有参数的存储过程前,需要先进行以下准备工作: 保证安装了 SQL Server。若未安装,则需要先安装 SQL Server。 使用 SQL Server 进行建表和创建带参数的存储过程。具体的建表和创建存储过程可以参考 SQL S…

    C# 2023年5月31日
    00
  • C#自定义函数NetxtString生成随机字符串

    下面就为大家讲解一下如何在C#中自定义函数NetxtString生成随机字符串。 1、概述 NetxtString是一个C#字符串扩展类,提供了生成随机字符串的方法,可以指定生成字符串的长度和字符集。下面是该类的源码: public static class NetxtString { private static Random random = new R…

    C# 2023年5月31日
    00
  • C# 如何在WINForm程序中创建XML文件

    在C#的WINForm程序中,可以使用System.Xml命名空间中的类来创建和操作XML文件。本文将提供创建XML文件的完整攻略,包括创建XML文档、添加元素和属性、保存XML文件等。同时,本文还将提供两个示例,演示如何在WINForm程序中创建XML文件。 创建XML文档 要创建XML文档,可以使用XmlDocument类。以下是创建XML文档的步骤: …

    C# 2023年5月15日
    00
  • .Net Core中使用EFCore生成反向工程

    在 .NET Core 中,可以使用 Entity Framework Core (EF Core) 来生成反向工程。反向工程是指根据数据库中的表自动生成模型类和上下文类。以下是 .NET Core 中使用 EF Core 生成反向工程的完整攻略: 步骤一:安装 EF Core 工具 在使用 EF Core 生成反向工程前,需要在 .NET Core 项目中…

    C# 2023年5月17日
    00
  • C#中静态的深入理解

    C#中静态的深入理解 引言 静态是C#中重要的概念之一,常常用来修饰变量、方法和类。正确的理解与使用静态,可以使程序更加高效,减少开发中的错误。 静态变量 静态变量是指在类级别定义一个变量,即该变量是应用于整个类,而非特定实例。静态变量的生命周期与类的生命周期相同。定义静态变量使用static关键字。 示例1:定义一个静态变量并初始化为0 public cl…

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