请解释一下将图片二进制方式保存到数据库的代码

时间:2022-07-26 21:45:45
请高手解释下 下面的代码。请高手加上注释,由于小弟新手 请每句代码都能加上注释。谢谢谢谢


 OpenFileDialog open = new OpenFileDialog();
            open.Filter = "*jpg|*.jpg|*bmp|*.bmp|*gif|*.gif";
            if (open.ShowDialog() == DialogResult.OK)
            {
                this.txtSelectPath.Text = open.FileName;
                picImg.ImageLocation = open.FileName;
                FileStream file = new FileStream(this.txtSelectPath.Text, FileMode.Open, FileAccess.Read);
                Byte[] bt = new Byte[file.Length];
                BinaryReader br = new BinaryReader(file);
                bt = br.ReadBytes(Convert.ToInt32(file.Length));
                SqlConnection con = new SqlConnection("server=.;database=img;uid=sa;pwd=123");
                con.Open();
                string str = string.Format("insert into imgs values(@Image)");
                SqlCommand cmd = new SqlCommand(str, con);
                cmd.Parameters.Add("@id", SqlDbType.Int, 4);
                cmd.Parameters.Add("@Image", SqlDbType.Image);
                cmd.Parameters["@id"].Value = 1;
                cmd.Parameters["@Image"].Value = bt;
                cmd.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("图片上传成功");
            }

12 个解决方案

#1


 转为字节然后在存了.

 FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
 byte[] bytesOriginal = new byte[Convert.ToInt32(stream.Length)];
 stream.Read(bytesOriginal, 0, Convert.ToInt32(stream.Length));
 stream.Flush();
 stream.Dispose();

#2


- -今天见到的第二个将图片存到数据库了,

#3


二楼的!  估计你见到的第一个是我。哈哈。。

#4


嗯,我想说的是,不是直接存路径更好吗?

#5


引用 4 楼 huhuke 的回复:
嗯,我想说的是,不是直接存路径更好吗?

存到硬盘,只记录路径的好处是数据量小,但是如果在库外动了图像文件,则可能两者不匹配。存储到数据库的好处是字段与图像内容不会被分别处理,但问题是如果图像太多,数据量大,则会造成数据库臃肿,效率降低。两者各有优缺点

#6


引用 5 楼 zhoujk 的回复:
引用 4 楼 huhuke 的回复:
嗯,我想说的是,不是直接存路径更好吗?

存到硬盘,只记录路径的好处是数据量小,但是如果在库外动了图像文件,则可能两者不匹配。存储到数据库的好处是字段与图像内容不会被分别处理,但问题是如果图像太多,数据量大,则会造成数据库臃肿,效率降低。两者各有优缺点


不需要匹配啊?又不在数据库中保存文件内容,就显然不需要匹配文件内容。而从数据库中读出文件路径是,你如果判断一下 if(file.Exists) 不就匹配了嘛!

#7


引用 6 楼 sp1234 的回复:
引用 5 楼 zhoujk 的回复:
引用 4 楼 huhuke 的回复:
嗯,我想说的是,不是直接存路径更好吗?

存到硬盘,只记录路径的好处是数据量小,但是如果在库外动了图像文件,则可能两者不匹配。存储到数据库的好处是字段与图像内容不会被分别处理,但问题是如果图像太多,数据量大,则会造成数据库臃肿,效率降低。两者各有优缺点


不需要匹配啊?又不在数据库中保存文件内容,就显然不需……

如果是文件在资源管理器中被移动到另一个文件夹呢,例如用户对文件进行了重新分类

#8


引用 7 楼 zhoujk 的回复:
如果是文件在资源管理器中被移动到另一个文件夹呢,例如用户对文件进行了重新分类


你想太多了。
放数据库里,要是数据库坏了呢?
要是用户硬盘坏了,你是不是还要帮他恢复数据啊?

#9


引用 8 楼 yuwenge 的回复:
你想太多了。
放数据库里,要是数据库坏了呢?
要是用户硬盘坏了,你是不是还要帮他恢复数据啊?

数据库或硬盘坏了是事故,而用户移动文件看起来是正常的操作。

#10


引用 9 楼 zhoujk 的回复:
引用 8 楼 yuwenge 的回复:
你想太多了。
放数据库里,要是数据库坏了呢?
要是用户硬盘坏了,你是不是还要帮他恢复数据啊?

数据库或硬盘坏了是事故,而用户移动文件看起来是正常的操作。


在系统内对保存图片的路径建立与操作数据库权限同等的权限,一般用户就破坏不了了

#11


建议不要存在数据库

#12


给位师傅,太认真了,我就是为了这件事头疼,给我解决了这个问题

#1


 转为字节然后在存了.

 FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
 byte[] bytesOriginal = new byte[Convert.ToInt32(stream.Length)];
 stream.Read(bytesOriginal, 0, Convert.ToInt32(stream.Length));
 stream.Flush();
 stream.Dispose();

#2


- -今天见到的第二个将图片存到数据库了,

#3


二楼的!  估计你见到的第一个是我。哈哈。。

#4


嗯,我想说的是,不是直接存路径更好吗?

#5


引用 4 楼 huhuke 的回复:
嗯,我想说的是,不是直接存路径更好吗?

存到硬盘,只记录路径的好处是数据量小,但是如果在库外动了图像文件,则可能两者不匹配。存储到数据库的好处是字段与图像内容不会被分别处理,但问题是如果图像太多,数据量大,则会造成数据库臃肿,效率降低。两者各有优缺点

#6


引用 5 楼 zhoujk 的回复:
引用 4 楼 huhuke 的回复:
嗯,我想说的是,不是直接存路径更好吗?

存到硬盘,只记录路径的好处是数据量小,但是如果在库外动了图像文件,则可能两者不匹配。存储到数据库的好处是字段与图像内容不会被分别处理,但问题是如果图像太多,数据量大,则会造成数据库臃肿,效率降低。两者各有优缺点


不需要匹配啊?又不在数据库中保存文件内容,就显然不需要匹配文件内容。而从数据库中读出文件路径是,你如果判断一下 if(file.Exists) 不就匹配了嘛!

#7


引用 6 楼 sp1234 的回复:
引用 5 楼 zhoujk 的回复:
引用 4 楼 huhuke 的回复:
嗯,我想说的是,不是直接存路径更好吗?

存到硬盘,只记录路径的好处是数据量小,但是如果在库外动了图像文件,则可能两者不匹配。存储到数据库的好处是字段与图像内容不会被分别处理,但问题是如果图像太多,数据量大,则会造成数据库臃肿,效率降低。两者各有优缺点


不需要匹配啊?又不在数据库中保存文件内容,就显然不需……

如果是文件在资源管理器中被移动到另一个文件夹呢,例如用户对文件进行了重新分类

#8


引用 7 楼 zhoujk 的回复:
如果是文件在资源管理器中被移动到另一个文件夹呢,例如用户对文件进行了重新分类


你想太多了。
放数据库里,要是数据库坏了呢?
要是用户硬盘坏了,你是不是还要帮他恢复数据啊?

#9


引用 8 楼 yuwenge 的回复:
你想太多了。
放数据库里,要是数据库坏了呢?
要是用户硬盘坏了,你是不是还要帮他恢复数据啊?

数据库或硬盘坏了是事故,而用户移动文件看起来是正常的操作。

#10


引用 9 楼 zhoujk 的回复:
引用 8 楼 yuwenge 的回复:
你想太多了。
放数据库里,要是数据库坏了呢?
要是用户硬盘坏了,你是不是还要帮他恢复数据啊?

数据库或硬盘坏了是事故,而用户移动文件看起来是正常的操作。


在系统内对保存图片的路径建立与操作数据库权限同等的权限,一般用户就破坏不了了

#11


建议不要存在数据库

#12


给位师傅,太认真了,我就是为了这件事头疼,给我解决了这个问题