问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

VS.C#如何向数据数据库中存入和读取图片的?

发布网友 发布时间:2022-04-08 02:47

我来回答

2个回答

热心网友 时间:2022-04-08 04:16

首先,在数据库中要建立相应的字段能保存Bytes,例如在SQL Server中用Image类型来定义字段。我所用到的数据库大致结构如下:

字段名
类型
备注

FileID
Int
自增字段

FileName
Varchar(256)

FullName
Varchar(1024)

FileData
Image

然后就是写入数据库,代码如下:

FileInfo fi = new FileInfo( txtFileName.Text );// Replace with your file name

if ( fi.Exists)

{

byte[] bData = null;

int nNewFileID = 0;

// Read file data into buffer

using ( FileStream fs = fi.OpenRead() )

{

bData = new byte[fi.Length];

int nReadLength = fs.Read( bData,0, (int)(fi.Length) );

}

// Add file info into DB

string strQuery = "INSERT INTO FileInfo "

+ " ( FileName, FullName, FileData ) "

+ " VALUES "

+ " ( @FileName, @FullName, @FileData ) "

+ " SELECT @@IDENTITY AS 'Identity'";

SqlCommand sqlComm = new SqlCommand( strQuery, sqlConn );

sqlComm.Parameters.Add( "@FileName", fi.Name );

sqlComm.Parameters.Add( "@FullName", fi.FullName );

sqlComm.Parameters.Add( "@FileData", bData );

// Get new file ID

SqlDataReader sqlReader = sqlComm.ExecuteReader();

if( sqlReader.Read() )

{

nNewFileID = int.Parse(sqlReader.GetValue(0).ToString());

}

sqlReader.Close();

sqlComm.Dispose();

if( nNewFileID > 0 )

{

// Add new item in list view

ListViewItem itmNew = lsvFileInfo.Items.Add( fi.Name );

itmNew.Tag = nNewFileID;

}

}

而读出的代码如下:

// Get new file name

string strFullName = dlgFBSave.SelectedPath;

if( strFullName[strFullName.Length - 1] != '\\' )

strFullName += @"\";

strFullName += lsvFileInfo.SelectedItems[0].Text;

string strQuery = "SELECT FileData FROM FileInfo "

+ " WHERE FileID = " + lsvFileInfo.SelectedItems[0].Tag.ToString();

SqlDataAdapter sqlDAdapter = new SqlDataAdapter(strQuery,sqlConn);

DataSet sqlRecordSet = new DataSet();

byte[] bData = null;

//Get file data from DB

try

{

sqlDAdapter.Fill( sqlRecordSet, "FileInfo" );

foreach( DataRow dr in sqlRecordSet.Tables["FileInfo"].Rows)

{

if( dr["FileData"] != DBNull.Value )

bData = ( byte[] )dr["FileData"];

}

}

catch(SqlException sqlErr)

{

MessageBox.Show( sqlErr.Message );

}

catch

{

MessageBox.Show( "Failed to read data from DB!" );

}

sqlRecordSet.Dispose();

sqlDAdapter.Dispose();

if( bData != null )

{

// Save file

FileInfo fi = new FileInfo( strFullName );

if( !fi.Exists )

{

//Create the file.

using (FileStream fs = fi.Create())

{

fs.Write( bData, 0, bData.Length);

}

}

else

{

//Create the file.

using (FileStream fs = fi.OpenWrite())

{

fs.Write( bData, 0, bData.Length);

}

}

}

不过需要提的一点,如果把大量的文件存入数据库的话,会造成数据库的臃肿,而且访问量也会增大。所以现在比较流行的做法,是把文件上传到服务器上,而在数据库上只保存文件的相对路径即可。那么访问的时候,先通过数据库得到文件的相对路径,然后再访问服务器上的文件

热心网友 时间:2022-04-08 05:34

写入图片部分代码:
假设图片为 test.gif
byte [] bytes = File.ReadAllBytes(@"c:\test.gif");
SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=xxx;database=数据库名");
con.open();
SqlCommand cmd = new SqlCommand("insert into 表(图片字段) values(@image)");
cmd.Parameters.Add("@image", SqlDbType.Image).Value = bytes;
cmd.ExecuteNonQuery();
读取部分代码:
SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=xxx;database=数据库名");
con.open();
SqlCommand cmd = new SqlCommand("select 图片字段 表 where 图片编号=1");
object scalar = scmd.ExecuteScalar();
byte[] bytes=(byte[])scalar;

如果保存成文件:
File.WriteAllBytes(@"c:\read.gif",bytes);
如果要直接用网页输出:
MemoryStream ms = new MemoryStream(bytes);
Response.ContentType = "image/gif";
System.Drawing.Image image=System.Drawing.Image.FromStream(ms);
image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
Response.End();
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 乏善可陈意思是什么? 什么乏什么意思 “秋乏”是什么意思呢? "乏善陈可"是什么意思? 乏于资财中的乏是什么意思? 乏人心是什么意思? 古代说的乏了是什么意思 乏 在古代汉语中是什么意思 乏指什么意思呢? 乏的乏是什么意思 三角函数综合题 高一 高一数学对数函数综合运算 火灾时,局部闭式喷头开始喷水,之后联动主泵启动,那么主泵启动后,其他区域的喷头会喷水吗? 函数综合,高一的题目4 高一数学题(指数函数综合应用) 为什么我的雨刷器喷头乱喷水喷不到点子上? 高一三角函数综合选择题 高一数学 三角函数综合 关于高一数学函数的奇偶与单调性的综合题!谢谢! 喷头对着浴室门喷水会流水出来 刷宝短视频赚钱在哪里下载? 安装SSL证书对服务器是否有什么要求? 刷宝视频现在很火的,大家下载了吗? 安装ssl证书之后打不开 大屏超薄的LED电视选哪个? 超薄壁挂LED显示屏有推荐吗? 多块超薄屏怎么拼接在一起 买液晶电视有LCD和LED是什么意思 excel不能复制了,复制时出来一个窗口“不能清楚剪贴板”,怎么回事? 为什么EXCEL会出现“不能清除剪贴板"的字样? excel复制提示"不能打开剪切板" 怎么办 Excel出现“不能清除剪贴板”怎么办 私家车一年没年审 ,还能年审吗? 车辆一年没年检,以后还能年检吗? 摩托车一年半没审了还能审吗? 我的车两年没审验了,还能年审吗? 我的摩托车一年多没审,现在能审吗? 车辆年检过期一年了,还能年检吗? 车放在家,没人开,也没年审一年了,现在还可以年审吗 摩托车一年没年检可继续年检吗?