今天我同学 在群里问 怎么在 SQLSERVER中存储图片
我在博客园中找了找相关的 信息
自己也实践了下
过程如下
首先 要创建 一个表 和一个存储过程
create table test
{
ids identity(1,1),
image images
}
create proc UpdateImage
(
@UpdateImage image
)
AS
Insert into Test(images) values(@UpdateImage)
GO
再来看下代码
1.1,在窗体中加一个OpenFileDialog控件
1.2,在窗体上添加一个打开文件按钮,添加如下单击事件代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.Sql;
using System.Data.SqlClient;
using System.IO;
namespace Fxrl
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Stream ms;
byte[] picbyte;
//ofdSelectPic.ShowDialog();
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((ms = openFileDialog1.OpenFile()) != null)
{
//MessageBox.Show("ok");
picbyte = new byte[ms.Length];
ms.Position = 0;
ms.Read(picbyte, 0, Convert.ToInt32(ms.Length));
//MessageBox.Show("读取完毕!");
//连接数据库
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=localhost;Database=教务管理;User Id=sa;Pwd=zbqy7135";
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
2.2 添加一个按钮,添加如下响应事件:
private void button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=localhost;Database=教务管理;User Id=sa;Pwd=zbqy7135";
string strSql = "select images from Test where ids=1";
SqlCommand cmd = new SqlCommand(strSql, conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
MemoryStream ms = new MemoryStream((byte[])reader["images"]);
Image image = Image.FromStream(ms, true);
reader.Close();
conn.Close();
pictureBox1.Image = image;
}
}
}
存储图片 将图片转换成2进制 然后存入数据库
读取的时候再转换回去