加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

.Net在SqlServer中的图片存取技术

发布时间:2020-12-12 15:55:02 所属栏目:MsSql教程 来源:网络整理
导读:??? 本文总结如何在.Net Winform和.Net webform(asp.net)中将图片存入sqlserver中并读取显示的方法 ??? 1,使用asp.net将图片上传并存入SqlServer中,然后从SqlServer中读取并显示出来 ??? 一,上传并存入SqlServer ??? 数据库结构 ? create table test ? {

??? 本文总结如何在.Net Winform和.Net webform(asp.net)中将图片存入sqlserver中并读取显示的方法

??? 1,使用asp.net将图片上传并存入SqlServer中,然后从SqlServer中读取并显示出来

??? 一,上传并存入SqlServer

??? 数据库结构
? create table test
? {
???? id identity(1,1),
???? FImage image
? }
?
??? 相关的存储过程
? Create proc UpdateImage
? (
???? @UpdateImage Image
? )
? As
? Insert Into test(FImage) values(@UpdateImage)
? GO

??? 在UpPhoto.aspx文件中添加如下:
<input id="UpPhoto" name="UpPhoto" runat="server" type="file">
<asp:Button id="btnAdd" name="btnAdd" runat="server" Text="上传"></asp:Button>

??? 然后在后置代码文件UpPhoto.aspx.cs添加btnAdd按钮的单击事件处理代码:
private void btnAdd_Click(object sender,System.EventArgs e)
{
??????? //获得图象并把图象转换为byte[]
??????? HttpPostedFile upPhoto=UpPhoto.PostedFile;
??????? int upPhotoLength=upPhoto.ContentLength;
??????? byte[] PhotoArray=new Byte[upPhotoLength];
??????? Stream PhotoStream=upPhoto.InputStream;
??????? PhotoStream.Read(PhotoArray,upPhotoLength);

??????? //连接数据库
??????? SqlConnection conn=new SqlConnection();
??????? conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";

??????? SqlCommand cmd=new SqlCommand("UpdateImage",conn);
??????? cmd.CommandType=CommandType.StoredProcedure;

??????? cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);
??????? cmd.Parameters["@UpdateImage"].Value=PhotoArray;

??????? //如果你希望不使用存储过程来添加图片把上面四句代码改为:
??????? //string strSql="Insert into test(FImage) values(@FImage)";
??????? //SqlCommand cmd=new SqlCommand(strSql,conn);
??????? //cmd.Parameters.Add("@FImage",SqlDbType.Image);
??????? //cmd.Parameters["@FImage"].Value=PhotoArray;

?conn.Open();
?cmd.ExecuteNonQuery();
?conn.Close();
}

??? 二,从SqlServer中读取并显示出来

??? 在需要显示图片的地方添加如下代码:
<asp:image id="imgPhoto" runat="server" ImageUrl="ShowPhoto.aspx"></asp:image>

??? ShowPhoto.aspx主体代码:
private void Page_Load(object sender,System.EventArgs e)
{
???? if(!Page.IsPostBack)
???? {
??????????????? SqlConnection conn=new SqlConnection()
??????????????? conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";

??????????????? string strSql="select * from test where id=2";//这里假设获取id为2的图片
??????????????? SqlCommand cmd=new SqlCommand()
??????????????? reader.Read();
??????????????? Response.ContentType="application/octet-stream";
??????????????? Response.BinaryWrite((Byte[])reader["FImage"]);
??????????????? Response.End();
??????????????? reader.Close();
???? }
}


??? 3,在winform中将图片存入sqlserver,并从sqlserver中读取并显示在picturebox中

??? 1,存入sqlserver

??? 数据库结构和使用的存储过过程,同上面的一样

??? 1.1,在窗体中加一个OpenFileDialog控件,命名为ofdSelectPic

??? 1.2,在窗体上添加一个打开文件按钮,添加如下单击事件代码:
??? Stream ms;
? byte[] picbyte;
? //ofdSelectPic.ShowDialog();
? if (ofdSelectPic.ShowDialog()==DialogResult.OK)
? {
?? if ((ms=ofdSelectPic.OpenFile())!=null)
?? {
??? //MessageBox.Show("ok");
??? picbyte=new byte[ms.Length];
??? ms.Position=0;
??? ms.Read(picbyte,Convert.ToInt32(ms.Length));
??? //MessageBox.Show("读取完毕!");

??? //连接数据库
??? SqlConnection conn=new SqlConnection();
??? conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";

??? SqlCommand cmd=new SqlCommand("UpdateImage",conn);
??? cmd.CommandType=CommandType.StoredProcedure;

??? cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);
??? cmd.Parameters["@UpdateImage"].Value=picbyte;

??? conn.Open();
??? cmd.ExecuteNonQuery();
??? conn.Close();

??? ms.Close();
??? }
?? }

??? 2,读取并显示在picturebox中

??? 2.1 添加一个picturebox,名为ptbShow

??? 2.2 添加一个按钮,添加如下响应事件:
????? SqlConnection conn=new SqlConnection();
?conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";

?string strSql="select FImage from test where id=1";

?SqlCommand cmd=new SqlCommand(strSql,conn);

?conn.Open();
?SqlDataReader reader=cmd.ExecuteReader();
??????? reader.Read();

?MemoryStream ms=new MemoryStream((byte[])reader["FImage"]);

?Image image=Image.FromStream(ms,true);

??????? reader.Close();
??????? conn.Close();

?ptbShow.Image=image;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读