Image.FromFile
加载,若为字节数据则用 Convert.FromBase64String
转换后用 MemoryStream
和 Image.FromStream
加载,再通过控件如 PictureBox
显示。
在C#中显示数据库中的图片,通常需要先从数据库中读取图片数据,然后将其转换为可显示的格式,以下是一个详细的步骤说明:
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#中实现从数据库读取并显示图片的功能,根据具体的需求和场景,可以对代码进行适当的修改和扩展。