C# 使用资源文件中的图片并上传到SQL Server数据库中

xiaoforward 2015-11-14 01:06:27
大家好:
如何将项目中资源文件中的图片上传到SQL Server数据库中?我在数据库中建立字段Attachment,AttachmentImage,类型分别为image,如果有附件插入到数据库中则插入一个附件的图标(在GridControl中显示,让大家清晰看出该行中是否包含附件,GridControl中显示附件的图标列格式为PictureEdit)但是在将项目资源中的图片转换为二进制文件的过程中搞不明白,望大家给个方法,或者是有更好的思路。
还有,如果插入成功,在窗体加载的时候显示该附件图标,数据该如何进行绑定?
我试了下下面的代码可以直接显示资源文件中的附件图片

pictureEdit1.Image = Properties.Resources.Attachment;

下面的方法可以将本地电脑中的图片转化为byte[],但是项目资源文件中的突变就不知道怎么处理了!
将本地的图片转化为Byte[]:

private static Byte[] ConvertByte(string fileName)
{
FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read);
byte[] byteFile = new byte[fileStream.Length];
fileStream.Read(fileDatas, 0, Convert.ToInt32(fileStream.Length));
fileStream.Close();
return byteFile ;
}

将Byte[]存入数据库中:

private void btnSave_Click(object sender, EventArgs e)
{
DateTime startTime = DateTime.Now;
byte[] fileDatas;
//fileDatas = ConvertByte(txtFileLocation.Text.Trim());
fileDatas = FileToBytes(Properties.Resources.Attachment.ToString());
string sql = "insert into T_Attachment(Attachment) values(@Attachment)";
ExecuteScalar(sql, new SqlParameter("@Attachment", fileDatas));
TimeSpan span = DateTime.Now - startTime;
XtraMessageBox.Show("插入成功!\n"+"共耗时:"+span.TotalSeconds.ToString());

}





谢谢!
不胜感激!
...全文
249 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wfy4422 2015-11-16
  • 打赏
  • 举报
回复
变通一下嘛,反正都是转换成二进制,资源文件里的图片有image对象也可以转换成二进制的。至于空值情况,要传DbNull.Value
xiaoforward 2015-11-16
  • 打赏
  • 举报
回复
引用 3 楼 From_TaiWan 的回复:
不论什么文件,都可以存到数据库的varbinary字段里


sql server数据库中对应的字段类型为image,如果byte[] 为空,则如果插入到数据库中?
我直接设置byte[] attachemnt=null,插入数据库提示下图错误:



ExecuteScalar(sql, new SqlParameter("@Attachment", fileDatas));

如果byte[]为空时如何处理?
谢谢!
crystal_lz 2015-11-16
  • 打赏
  • 举报
回复
把图片直接放入数据库真的好吗 - -!。。反正重来值在数据库里面保存图标路径的路过。。
秋的红果实 2015-11-15
  • 打赏
  • 举报
回复
不论什么文件,都可以存到数据库的varbinary字段里
xiaoforward 2015-11-15
  • 打赏
  • 举报
回复
引用 1 楼 shaoerbao 的回复:
网上一找一大堆。。

public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto)
{
//将Image转换成流数据,并保存为byte[] 
MemoryStream mstream = new MemoryStream();
imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] byData = new Byte[mstream.Length];
mstream.Position = 0;
mstream.Read(byData, 0, byData.Length);
mstream.Close();
return byData;
}
谢谢!
runerback 2015-11-15
  • 打赏
  • 举报
回复
网上一找一大堆。。

public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto)
{
//将Image转换成流数据,并保存为byte[] 
MemoryStream mstream = new MemoryStream();
imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] byData = new Byte[mstream.Length];
mstream.Position = 0;
mstream.Read(byData, 0, byData.Length);
mstream.Close();
return byData;
}

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧