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();
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
存到硬盘,只记录路径的好处是数据量小,但是如果在库外动了图像文件,则可能两者不匹配。存储到数据库的好处是字段与图像内容不会被分别处理,但问题是如果图像太多,数据量大,则会造成数据库臃肿,效率降低。两者各有优缺点
#6
不需要匹配啊?又不在数据库中保存文件内容,就显然不需要匹配文件内容。而从数据库中读出文件路径是,你如果判断一下 if(file.Exists) 不就匹配了嘛!
#7
如果是文件在资源管理器中被移动到另一个文件夹呢,例如用户对文件进行了重新分类
#8
你想太多了。
放数据库里,要是数据库坏了呢?
要是用户硬盘坏了,你是不是还要帮他恢复数据啊?
#9
数据库或硬盘坏了是事故,而用户移动文件看起来是正常的操作。
#10
在系统内对保存图片的路径建立与操作数据库权限同等的权限,一般用户就破坏不了了
#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();
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
存到硬盘,只记录路径的好处是数据量小,但是如果在库外动了图像文件,则可能两者不匹配。存储到数据库的好处是字段与图像内容不会被分别处理,但问题是如果图像太多,数据量大,则会造成数据库臃肿,效率降低。两者各有优缺点
#6
不需要匹配啊?又不在数据库中保存文件内容,就显然不需要匹配文件内容。而从数据库中读出文件路径是,你如果判断一下 if(file.Exists) 不就匹配了嘛!
#7
如果是文件在资源管理器中被移动到另一个文件夹呢,例如用户对文件进行了重新分类
#8
你想太多了。
放数据库里,要是数据库坏了呢?
要是用户硬盘坏了,你是不是还要帮他恢复数据啊?
#9
数据库或硬盘坏了是事故,而用户移动文件看起来是正常的操作。
#10
在系统内对保存图片的路径建立与操作数据库权限同等的权限,一般用户就破坏不了了
#11
建议不要存在数据库
#12
给位师傅,太认真了,我就是为了这件事头疼,给我解决了这个问题