这是一枚纯粹的实例,里面有些跟数据库交互的地方,比如某个值,是随便给你的,演示而已.
既然要显示,还是用个简单的winForm吧
-----------------------------------------------------------------
数据库:
库名字:test
表名字:testPic
字段:picName nvarchar(50),pic image
---------------------------------------------------------------
窗体
一个pictureBox,两个button,名字不改,一个button1是上传button2是查询
一个openFileDialog 用于上传时候选择文件
--------------------------------------------------------------
请看代码注释
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "jpg|*jpg|bmp|*bmp|gif|*gif|png|*png";//过滤文件
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string FileFullPath = openFileDialog1.FileName;//取到图片文件的路径
pictureBox1.LoadAsync(FileFullPath);//把图片加载到界面的图片框上
FileStream fs = new FileStream(FileFullPath, FileMode.Open, FileAccess.Read);//用文件流来开启这个图片
byte[] img = new byte[fs.Length];//实例化一个能够装下这个图片的字节数组
BinaryReader br = new BinaryReader(fs);//使用二进制读取器实例读取这个图片文件
img = br.ReadBytes(Convert.ToInt32(fs.Length));//用读取器的读取字节方法把图片读进之前的img数组
SqlConnection sc = new SqlConnection(@"server=192.168.1.185;database=test;user id=my;password=4321");//连接数据库
sc.Open();//建立连接
SqlCommand cmd = new SqlCommand(@"insert into pictest values(@picName,@pic)",sc);//用一个数据库sql命令来插入一条记录
SqlParameter[] sp = new SqlParameter[2];//实例化两个参数,分别是两个字段的值
sp[0] = new SqlParameter("@picName","logo");
sp[1] = new SqlParameter("@pic",img);//字节数组对应了图片
cmd.Parameters.AddRange(sp);
cmd.ExecuteNonQuery();//执行这个命令
sc.Close();//管理数据连接
MessageBox.Show("上传成功");
}
}
//读取
private void button2_Click(object sender, EventArgs e)
{
SqlConnection sc = new SqlConnection(@"server=192.168.1.185;database=test;user id=kx;password=4321");
sc.Open();
SqlCommand cmd = new SqlCommand(@"select * from picTest where picName=@picName", sc);
SqlParameter[] sp = new SqlParameter[1];
sp[0] = new SqlParameter("@picName", "logo");
cmd.Parameters.AddRange(sp);
SqlDataAdapter sa = new SqlDataAdapter(cmd);//使用数据填充器查询数据
DataSet ds = new DataSet();
sa.Fill(ds, "tablename"); //放到数据集
MemoryStream ms=new MemoryStream((byte[])ds.Tables[0].Rows[0][1]);//使用内存流直接在内存中把图片字段的值转化成字节数组后实例化这个内存流
pictureBox1.Image = Image.FromStream(ms);//把这个内存流用image的静态方法,fromStream赋值給图片框的image属性
ms.Close();//关闭内存流
sc.Close();//关闭连接
}
}