当前位置:首页 > 行业动态 > 正文

如何在C中从数据库加载并显示图片?

### C#显示数据库图片方法:先从数据库读取图片路径或字节数据,若为路径则用 Image.FromFile加载,若为字节数据则用 Convert.FromBase64String转换后用 MemoryStream和 Image.FromStream加载,再通过控件如 PictureBox显示。

在C#中显示数据库中的图片,通常需要先从数据库中读取图片数据,然后将其转换为可显示的格式,以下是一个详细的步骤说明:

如何在C中从数据库加载并显示图片?  第1张

一、准备工作

1、创建数据库和表:需要在数据库中创建一个用于存储图片的表,在SQL Server中,可以创建一个包含图片数据的表,如ImageStore,字段包括ImgID(图片编号)、ImageData(图片数据,类型为image或varbinary(max))等。

2、插入图片数据:通过程序或其他方式向表中插入图片数据,可以使用文件流将图片读取为字节数组,然后存储到数据库中。

二、读取并显示图片

1、建立数据库连接:使用SqlConnection类建立与数据库的连接。

   string connectionString = "Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
   SqlConnection conn = new SqlConnection(connectionString);
   conn.Open();

2、查询图片数据:使用SqlCommand执行查询语句,从数据库中获取图片数据。

   string sql = "SELECT ImageData FROM ImageStore WHERE ImgID = @ImgID";
   SqlCommand cmd = new SqlCommand(sql, conn);
   cmd.Parameters.AddWithValue("@ImgID", 1); // 假设要查询的图片编号为1

3、读取图片字节数组:执行查询命令后,从结果集中读取图片的字节数组。

   byte[] imageBytes = (byte[])cmd.ExecuteScalar();

4、将字节数组转换为图片:使用MemoryStream和Bitmap类将字节数组转换为图片对象。

   if (imageBytes != null && imageBytes.Length > 0)
   {
       MemoryStream ms = new MemoryStream(imageBytes);
       ms.Position = 0;
       Bitmap bitmap = new Bitmap(Image.FromStream(ms));
       pictureBox1.Image = bitmap;
   }

5、关闭连接:操作完成后,关闭数据库连接。

   conn.Close();

三、完整示例代码

以下是一个完整的示例代码,展示了如何在Windows Forms应用程序中显示数据库中的图片:

using System;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace DisplayDatabaseImageExample
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        private void btnShowImage_Click(object sender, EventArgs e)
        {
            string connectionString = "Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                string sql = "SELECT ImageData FROM ImageStore WHERE ImgID = @ImgID";
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@ImgID", 1); // 假设要查询的图片编号为1
                    byte[] imageBytes = (byte[])cmd.ExecuteScalar();
                    if (imageBytes != null && imageBytes.Length > 0)
                    {
                        MemoryStream ms = new MemoryStream(imageBytes);
                        ms.Position = 0;
                        Bitmap bitmap = new Bitmap(Image.FromStream(ms));
                        pictureBox1.Image = bitmap;
                    }
                    else
                    {
                        pictureBox1.Image = null;
                    }
                }
            }
        }
    }
}

四、注意事项

1、异常处理:在实际应用中,应添加适当的异常处理代码,以捕获和处理可能出现的错误,如数据库连接失败、查询错误等。

2、性能优化:如果需要显示大量图片或频繁访问数据库,应考虑优化数据库查询和数据传输的性能,如使用索引、缓存等技术。

3、安全性:在处理用户上传的图片时,应进行必要的验证和过滤,以防止反面代码或文件的攻击。

通过以上步骤,可以在C#中实现从数据库读取并显示图片的功能,根据具体的需求和场景,可以对代码进行适当的修改和扩展。

0