.NET技术:简易教程将图片保存到数据库 (.net 图片保存到数据库)

在现代社会中,图片已经成为我们生活和工作中必不可少的数据类型之一。然而,随着云计算和移动设备的普及,传统的图片保存方式也开始面临着一些问题:传统的文件系统存储方式对于跨平台和分布式系统的支持有限,而数据库作为一种视图云计算和移动设备发展趋势的数据存储方式,被越来越多的人所青睐。

在.NET技术中,我们可以轻松地将图片保存到数据库中,并通过数据库查询的方式快速地获取我们需要的图片。本篇文章将为大家介绍如何使用.NET来实现这一目标。

1. 数据库准备

我们需要准备一个数据库,并创建一张图片表来存储图片。以下是一张简单的图片表结构:

CREATE TABLE [dbo].[ImageTable](

[ID] [bigint] IDENTITY(1,1) NOT NULL,

[ImageName] [nvarchar](200) NOT NULL,

[ImageContent] [image] NOT NULL,

CONSTRNT [PK_ImageTable] PRIMARY KEY CLUSTERED

(

[ID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

如上所示,我们需要定义三个字段:ID、ImageName和ImageContent。其中ID是自增的主键,ImageName是图片的名称,ImageContent是图片二进制内容。

2. 上传图片

接下来,我们需要将图片保存到数据库中。通过以下方法,我们可以将一个本地文件转换为二进制文件,并保存到数据库中。

public static void SaveImageToDB(string filePath, string imageName)

{

string connectionStr = “Data Source=(local);Initial Catalog=TestDB;Integrated Security=True;”;

string sql = “INSERT INTO [dbo].[ImageTable]([ImageName],[ImageContent])VALUES(@ImageName,@ImageContent)”;

using (SqlConnection conn = new SqlConnection(connectionStr))

{

conn.Open();

using (SqlCommand cmd = new SqlCommand(sql, conn))

{

cmd.Parameters.AddWithValue(“@ImageName”, imageName);

cmd.Parameters.AddWithValue(“@ImageContent”, ReadFile(filePath));

cmd.ExecuteNonQuery();

}

}

}

private static byte[] ReadFile(string filePath)

{

FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);

BinaryReader br = new BinaryReader(fs);

byte[] data = br.ReadBytes((int)fs.Length);

br.Close();

fs.Close();

return data;

}

在上传图片时,我们需要传入图片路径和图片名称。以上代码中,我们使用了System.IO.FileStream类来读取文件内容,然后使用System.Data.SqlClient.SqlConnection类的ExecuteNonQuery方法将图片保存到数据库。

3. 下载图片

完成图片上传后,我们可以通过以下方式来从数据库中下载我们需要的图片:

public static void ReadImageFromDB(string imageName, string savePath)

{

string connectionStr = “Data Source=(local);Initial Catalog=TestDB;Integrated Security=True;”;

string sql = “SELECT [ImageContent] FROM [dbo].[ImageTable] WHERE [ImageName] = @ImageName”;

using (SqlConnection conn = new SqlConnection(connectionStr))

{

conn.Open();

using (SqlCommand cmd = new SqlCommand(sql, conn))

{

cmd.Parameters.AddWithValue(“@ImageName”, imageName);

using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))

{

if (reader.Read())

{

long offset = 0;

long startIndex = 0;

byte[] buffer = new byte[4096];

FileStream fs = new FileStream(savePath, FileMode.Create, FileAccess.Write);

BinaryWriter bw = new BinaryWriter(fs);

while ((startIndex = reader.GetBytes(0, offset, buffer, 0, buffer.Length)) > 0)

{

offset += startIndex;

bw.Write(buffer, 0, (int)startIndex);

bw.Flush();

}

bw.Close();

fs.Close();

reader.Close();

}

}

}

}

}

以上代码中,我们需要传入图片名称和保存路径。使用System.Data.SqlClient.SqlDataReader类的GetBytes方法读取二进制流并写入到文件中,从而完成图片的下载。

通过上述步骤,我们可以成功地将图片保存到数据库中,并通过数据库查询的方式获取图片内容。在实际应用中,我们可以根据需要对以上代码进行封装和优化,以实现更好的用户体验和代码可读性。

相关问题拓展阅读:

vb.net 中如何将图片保存到SQL数据库

保存路御仔径更好,我几个项目都是这样。镇滚汪

具体如何保存,需要看备慎你使用什么样的上传控件才可以定。

个人推荐一个是CFUPDATE,不错的控件,你可以了解,如果有不清楚,可以再问我。

首消乎芦先要设计数据字段为blob类型的,不知道记错了没

然后把顷隐图片作为数据流拿带读取到内存,然后存入数据库

如何用ASP.NET想数据库中存取图片

鉴于很多同学咨询,如何向数据库中存储并读取图片的方法.在此给出代码,供大家参考.但个人建议,尽量少向数据库中存储如此大二进制数据,会造成数据库过于膨胀,如果采用DataSet读取数据时,当数据量过大还会造成内存严重占用,尤其是在B/S程序设计中,后果会更明显,除非用户强烈要求.一般存储图片时,如无特殊要求,只需要在数据库中存储图片的相对路径即可,将真正的图片存储在指定的文件夹就OK了.当然,两种方式在不同的适用面都有自己的优缺点,下面几篇文章大家可以看看:

以下是存储并显示图片的代码

private void button1_Click(object sender, EventArgs e) //button1的Click事件

//存储图片的代码,需在界面添加按钮Button1,打开文件对话框轮基openFileDialog1,列表框listBox1和图片控件腊悄谨pictureBox1,代码注释部分为SqlServer实现,非注释部分为Access实现,在Access中,数据库名为mydb.mdb,表名为photos,字段为photoid(文本类型,主键),photoimg(OLE对象类型,用于存图片)

{

openFileDialog1.Filter = “*jpg|*.jpg|*bmp|*.bmp|*gif|*.gif”;

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

string fullpath = openFileDialog1.FileName

FileStream fs = new FileStream(fullpath, FileMode.Open, FileAccess.Read);

byte imagebytes = new byte;

BinaryReader br = new BinaryReader(fs);

imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length));//把所选图片文件的流中的数据读入字节数组

OleDbConnection conn = new OleDbConnection(“provider=microsoft.jet.oledb.4.0;data source=” + Application.StartupPath + “

conn.Open();

OleDbCommand cmd = new OleDbCommand(“insert into photos values(@id,@Image)”, conn);

cmd.Parameters.Add(“@id”, OleDbType.VarChar, 50);

cmd.Parameters.Add(“@Image”, OleDbType.Binary);//图片数据

cmd.Parameters.Value = DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond;

cmd.Parameters.Value = imagebytes;//为图片数据的SQL参数赋值

cmd.ExecuteNonQuery();

conn.Close();

//SqlConnection conn = new SqlConnection(“server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126”);

//conn.Open();

//SqlCommand cmd = new SqlCommand(“insert into photos values(@id,@Image)”, conn);

//cmd.Parameters.Add(“@id”, SqlDbType.VarChar, 50);

//cmd.Parameters.Add(“@Image”, SqlDbType.Image );//与ACCESS数据库唯一不同点

//cmd.Parameters.Value = DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond;

//cmd.Parameters.Value = imagebytes;

//cmd.ExecuteNonQuery();

//conn.Close();

MessageBox.Show(“图片上传成功”);

bindListBox();

}

}

private void bindListBox()//将photoId字段的数据显示在listBox1中,以便查看存入库中的每一个图片

{

OleDbConnection conn = new OleDbConnection(“provider=microsoft.jet.oledb.4.0;data source=” + Application.StartupPath + “

OleDbCommand cmd = new OleDbCommand(“select photoid from photos”);

cmd.Connection = conn;

OleDbDataAdapter da = new OleDbDataAdapter();

da.SelectCommand = cmd;

DataSet ds = new DataSet();

da.Fill(ds);

listBox1.DataSource = ds.Tables.DefaultView;//设置listBox1的数据源

listBox1.DisplayMember = “photoid”;//设置listBox1即将显示数据源中的哪个字段的数据

//SqlConnection conn = new SqlConnection(“server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126”);

//SqlCommand cmd = new SqlCommand(“select photoid from photos”);

//cmd.Connection = conn;

//SqlDataAdapter da = new SqlDataAdapter();

//da.SelectCommand = cmd;

//DataSet ds = new DataSet();

//da.Fill(ds);

//listBox1.DataSource = ds.Tables.DefaultView;

//listBox1.DisplayMember = “photoid”;

}

private void Form1_Load(object sender, EventArgs e) //Form1的Load事件

{

bindListBox();//程序加载时,先将数据库中现有的数据显示在listBox1中

}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)//listBox1的SelectedIndexChanged事件,当在listBox1中选择不同的photoId时,pictureBox1中显示该photoId对应的图片

{

OleDbConnection conn = new OleDbConnection(“provider=microsoft.jet.oledb.4.0;data source=” + Application.StartupPath + “

OleDbCommand cmd = new OleDbCommand(“select photoimg from photos where photoid='” + ((DataRowView)(listBox1.SelectedValue)) + “‘”);//将listBox1中选中的photoId所对应的图片数据从数据库中取出来

cmd.Connection = conn;

conn.Open();

OleDbDataReader dr = cmd.ExecuteReader();

dr.Read();

byte b = (byte)dr;//将图片数据转换成字节数组

MemoryStream stmBLOBData = new MemoryStream(b);//将该字节数组转换成内存流

pictureBox1.Image = Image.FromStream(stmBLOBData);//将该内存流转换成Image对象,并显示在pictureBox1中

//SqlConnection conn = new SqlConnection(“server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126”);

//SqlCommand cmd = new SqlCommand(“select photoimg from photos where photoid='” + ((DataRowView)(listBox1.SelectedValue)) + “‘”);

//cmd.Connection = conn;

//conn.Open();

//SqlDataReader dr = cmd.ExecuteReader();

//dr.Read();

//byte b = (byte)dr;

//MemoryStream stmBLOBData = new MemoryStream(b);

//pictureBox1.Image = Image.FromStream(stmBLOBData);

关于.net 图片保存到数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » .NET技术:简易教程将图片保存到数据库 (.net 图片保存到数据库)