关于使用C#将图片用二进制方式存储到sql server数据库中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于使用C#将图片用二进制方式存储到sql server数据库中相关的知识,希望对你有一定的参考价值。

做出的winform窗体如图所示,可能还要再添加一个按钮。具体步骤:
输入图片名称,然后点击button1选择图片,再添加一个按钮“预览”使得图片可以显示在左边的pictureBox1中
确认后,最后点击“添加”按钮将图片信息存储到sql server数据库中。
图片表是这样建的:
create table S(foodID varchar(10) primary key,-图片编号foodname varchar(30), -图片名称pic image )

我的程序卡在这里了,求详解,求指教

我也遇到过类似的问题呢,谁让咱们是新手呢。不过有人给了我两个参考网站,然后摸索着就解决了问题。可以参考一下http://zhidao.baidu.com/question/1381619597368002820.html?quesup2&oldq=1。主要还是用filestream来实现图片的二进制上传,和用memorystream来实现图片的下载和预览。不过我的界面和你的不大一样。呵呵。cnblogs博客园里有N多类似的代码和说明。亲可以去看一下。另外晒一下我的界面。呵呵

追问

我觉得我连新手都称不上。看代码还要慢慢理解。。好艰难。。。。。

追答

我是毕业后N多年了,在三年前偶然接触到C#和SQL,才开始一点点的接触。一直没看书,直到最近才借了本《叩响C#之门》和《从零开始学SQL SERVER》,一边复制代码,一边用这两本书翻译编码原理,也学到不少。慢慢来吧。给你一个我之前找的上传图片的小程序。虽然有点问题,查是基本上都是对的,改改就能用了。

追问

我后来搜到一个直接点击一个button就打开对话框选择图片,然后显示在pictureBox中的小程序段,挺好玩的。多谢呀

追答

呵呵,我自己的程序也是那样的,点击插入后打开对话框,选择好图片后会居中缩放在参考图片1的PICTUREBOX中,再单击PICTUREBOX1,会打开子窗口进行全屏预览。点击速查并选择单据后,与单据关联的图片信息会显示在PICTRUEBOX1中。足足折腾了我一个星期,呵呵。共同成长吧

追问

你知不知道有什么控件可以作临时容器存放从DataGridView中选中的数据?

追答

不一定要用控件吧。我猜你的意思是将SQL中的数据绑定到DATAGRIDVIEW中,然后选择某一行的数据,将指定的数据显示在某个控件里。或者是类似的意思。
你可以说的更清楚一些,才能让大家给你提方案嘛。呵呵。举个例子,我要得到某一列的值,我可以直接从数据库中读取一列的值,然后comboBox.items.add(read[].tostring()),也可以选择某一个值,给textBox,让textBox.text=this.datagridview.currentrows.cells[0].value.tostring();也可以用变量。也可以用dataset,反正N多种方式啦,关键还是要看你怎么用。我自学C#三年来,唯一的感触就是条条大路通罗马,还是先看目的是什么了。不好意思的是我从来不看书,只知道怎么弄,不知道术语和名词,呵呵,还得靠其它专业的人讲解啦。

参考技术A 讲图片的相对路径放到数据库里,把图片放到项目里。调用数据库里的相对路径就可以看的到 参考技术B public void Upload(string path, System.Web.UI.WebControls.FileUpload fileupload)

bool fileOK = false;
if (FileUpload1.HasFile)

string fileException = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
//获取指定路劲字符串的后缀名,并转化为小写
string[] allowExcption = ".jpg", ".jpeg", ".bmp",".gif" ;
//定义允许的后缀名
for (int i = 0; i < allowExcption.Length; i++)

if (fileException == allowExcption[i])

fileOK = true;



if (fileOK)

//判断文件是否存在,若不在则创建路径
if (System.IO.Directory.Exists(path))

//MessageBox.Show("该目录已经存在","信息提示");

else

System.IO.Directory.CreateDirectory(path);//创建文件路径

fileupload.SaveAs(path + "\\" + fileupload.FileName);//上传文件

else

Response.Write("<Script>alert('不支持此格式文件上传')</Script>");
return;



protected void Button1_Click(object sender, EventArgs e)

string serverpath = Server.MapPath("~/ImageFile");
string imapath = "~/ImageFile/" + FileUpload1.FileName;
Upload(serverpath, this.FileUpload1);
Image1.ImageUrl = imapath;
serverpath = Server.MapPath("~/ImageFile");
imapath = "~/ImageFile/" + FileUpload1.FileName;
Image1.ImageUrl = imapath;
Upload(serverpath, this.FileUpload1);

这部分是调用的(预览的功能),你要上传的话改成数据库操作就可以了,存放上传的路劲,文件的话她会自动生成文件夹放在里面的。你修改下应该就可以了追问

您好,我在使用你的代码段的时候有这样的问题:
public void Upload(string path, System.Web.UI.WebControls.FileUpload fileupload)
会出现“system.web中不存在类型或命名空间UI”,请问应该添加什么样的命名空间?求指教

追答

我这个是网站的命名方式,你可以新建一个空网站,拉一个FileUpload控件,一个image控件
一个button控件就能实现的,这个和你的应用程序差不多的,你改一下语法就可以了。

追问

我建的winform。。。。。。看来要换。。。

将 C# 十进制保存为 SQL 十进制(18,4)SQL [重复]

【中文标题】将 C# 十进制保存为 SQL 十进制(18,4)SQL [重复]【英文标题】:Saving C# decimal to SQL decimal(18,4) SQL [duplicate] 【发布时间】:2014-05-02 05:18:10 【问题描述】:

我有一个小问题。我有一个字段,我的客户希望将价格存储到小数点后 4 位(至少可以说很奇怪,但仍然如此)。到目前为止,我只能将 2 个小数位提交回数据库。

我使用 Code First 和 Entity 为我的数据库进行保存和 SQL Server 2008 R2。这是我对每个人的看法。

PurchaseOrder.cs(代码优先)

public virtual decimal ShippingCost  get; set; 

PurchaseOrderService.cs(服务层保存到实体)

public virtual void UpdatePurchaseOrder(PurchaseOrder purchaseOrder)

    if (purchaseOrder == null)
       throw new ArgumentNullException("purchase order");

    _purchaseOrderRepository.Update(purchaseOrder);

PurchaseOrder 表:

ShippingCost decimal(18, 4) NOT NULL

例如。运费在 UI 上输入为 10.5555。一直到服务层,它都保持着这个价值。一旦到达将其发送到实体进行保存的位置,数据库就不会保留超过 10.55 的这些额外值。

【问题讨论】:

【参考方案1】:

这里有一个实体框架默认值,它只使用 2 位小数。

Decimal precision and scale in EF Code First

展示了如何改变它。

【讨论】:

以上是关于关于使用C#将图片用二进制方式存储到sql server数据库中的主要内容,如果未能解决你的问题,请参考以下文章

C# 序列化之二进制

关于图片或者文件在数据库的存储方式归纳

转-关于图片或者文件在数据库的存储方式归纳

求助c# winform中将图片存入数据库详细写法

按图片中的要求用C#写代码!!QQ邮箱785615068@qq.com

记一次从Sql Server中图片二进制流还原回图片的开发过程