c#利用数据库存储图片
如题,想用c#和sqlsever来存储图片,知道的朋友麻烦告诉一下,需要用到哪些类,最好能给个实例和数据库的设计表...
如题,想用c#和sql sever来存储图片,知道的朋友麻烦告诉一下,需要用到哪些类,最好能给个实例和数据库的设计表
展开
展开全部
首先,创建一个数据库,用来保存图片,这只是个演示,所以一切从简。
create database MyDb
use MyDb
create table MyPhoto
(
id int primary key,
photo image //图片使用image 类型
)
然后,创建一个Windows应用程序,添加一个openFileDialog,一个 pictureBox,一个button(button 1的Text属性改为"上传")。
由于需要对文件操作,引入System.IO命名空间。对数据库操作当然要引入System.Data.SqlClient啦。基本思路就是将图片转化为字节数组保存起来,这时需要BinaryReader读取二进制字节。
代码部分:
——————————————————————————————————
using System.IO;
using System.Data.SqlClient;
namespace 如何将图片存入数据库
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "*jpg|*.jpg|*bmp|*.bmp|*gif|*.gif";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string fullpath = openFileDialog1.FileName;//获取文件对话框中选定的文件名的字符串,包括文件路径
FileStream fs = new FileStream(fullpath, FileMode.Open, FileAccess.Read);
byte[] imagebytes = new byte[fs.Length];//fs.Length文件流的长度,用字节表示
BinaryReader br = new BinaryReader(fs);//二进制文件读取器
imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length));//从当前流中将count个字节读入字节数组中
SqlConnection conn = new SqlConnection("server=.\\sqlexpress;initial catalog=MyDb;integrated security=true");
conn.Open();
SqlCommand cmd = new SqlCommand("insert into MyPhoto values(@id,@Image)", conn);
cmd.Parameters.Add("@id", SqlDbType.Int, 4);
cmd.Parameters.Add("@Image", SqlDbType.Image);
cmd.Parameters["@id"].Value = 1;
cmd.Parameters["@Image"].Value = imagebytes;
cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show("图片上传成功");
}
}
}
}
create database MyDb
use MyDb
create table MyPhoto
(
id int primary key,
photo image //图片使用image 类型
)
然后,创建一个Windows应用程序,添加一个openFileDialog,一个 pictureBox,一个button(button 1的Text属性改为"上传")。
由于需要对文件操作,引入System.IO命名空间。对数据库操作当然要引入System.Data.SqlClient啦。基本思路就是将图片转化为字节数组保存起来,这时需要BinaryReader读取二进制字节。
代码部分:
——————————————————————————————————
using System.IO;
using System.Data.SqlClient;
namespace 如何将图片存入数据库
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "*jpg|*.jpg|*bmp|*.bmp|*gif|*.gif";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string fullpath = openFileDialog1.FileName;//获取文件对话框中选定的文件名的字符串,包括文件路径
FileStream fs = new FileStream(fullpath, FileMode.Open, FileAccess.Read);
byte[] imagebytes = new byte[fs.Length];//fs.Length文件流的长度,用字节表示
BinaryReader br = new BinaryReader(fs);//二进制文件读取器
imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length));//从当前流中将count个字节读入字节数组中
SqlConnection conn = new SqlConnection("server=.\\sqlexpress;initial catalog=MyDb;integrated security=true");
conn.Open();
SqlCommand cmd = new SqlCommand("insert into MyPhoto values(@id,@Image)", conn);
cmd.Parameters.Add("@id", SqlDbType.Int, 4);
cmd.Parameters.Add("@Image", SqlDbType.Image);
cmd.Parameters["@id"].Value = 1;
cmd.Parameters["@Image"].Value = imagebytes;
cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show("图片上传成功");
}
}
}
}
展开全部
首先将数据库中存放该图片的字段类型设置为 二进制 (Image),然后将要上传的图片转换成二进制然后再查询到数据库中!
什么都不要的!
什么都不要的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你一个我以前写的一个提交类,代码中有存数据库的
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
namespace Employee
{
/// <summary>
/// Employee 的摘要说明。
/// </summary>
public class Employee
{
public Employee()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 添加员工信息
/// </summary>
/// <param name="Name">员工名称</param>
/// <param name="Sex">员工性别</param>
/// <param name="SFZ">身份证号</param>
/// <param name="Tel">联系电话</param>
/// <param name="Address">联系地址</param>
/// <param name="InDate">进入公司时间</param>
/// <param name="ContractDate">合同期限</param>
/// <param name="PhotoPath">照片</param>
/// <returns></returns>
public static bool addEmployee(string Name, string Sex, string SFZ, string Tel, string Address, string InDate, string ContractDate, string PhotoPath)
{
SqlConnection con = DBConn.CreateConnection();
try
{
MemoryStream ms = new MemoryStream();
System.Drawing.Image img = System.Drawing.Image.FromFile(PhotoPath);
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] imgBuffer = new Byte[ms.Length];
ms.Position = 0;
ms.Read(imgBuffer, 0, Convert.ToInt32(ms.Length));
con.Open();
SqlCommand cmd = new SqlCommand("insert into 员工(姓名,性别,身份证号,联系电话,联系地址,进入公司时间,合同期限,照片) values('"
+ Name + "','" + Sex + "','" + SFZ + "','" + Tel + "','" + Address + "','" + InDate + "'," + ContractDate + ", @照片)", con);
cmd.Parameters.Add("照片", SqlDbType.Image);
cmd.Parameters["照片"].Value = imgBuffer;
cmd.ExecuteNonQuery();
ms.Close();
return true;
}
catch
{
return false;
}
finally
{
con.Close();
}
}
}
}
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
namespace Employee
{
/// <summary>
/// Employee 的摘要说明。
/// </summary>
public class Employee
{
public Employee()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 添加员工信息
/// </summary>
/// <param name="Name">员工名称</param>
/// <param name="Sex">员工性别</param>
/// <param name="SFZ">身份证号</param>
/// <param name="Tel">联系电话</param>
/// <param name="Address">联系地址</param>
/// <param name="InDate">进入公司时间</param>
/// <param name="ContractDate">合同期限</param>
/// <param name="PhotoPath">照片</param>
/// <returns></returns>
public static bool addEmployee(string Name, string Sex, string SFZ, string Tel, string Address, string InDate, string ContractDate, string PhotoPath)
{
SqlConnection con = DBConn.CreateConnection();
try
{
MemoryStream ms = new MemoryStream();
System.Drawing.Image img = System.Drawing.Image.FromFile(PhotoPath);
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] imgBuffer = new Byte[ms.Length];
ms.Position = 0;
ms.Read(imgBuffer, 0, Convert.ToInt32(ms.Length));
con.Open();
SqlCommand cmd = new SqlCommand("insert into 员工(姓名,性别,身份证号,联系电话,联系地址,进入公司时间,合同期限,照片) values('"
+ Name + "','" + Sex + "','" + SFZ + "','" + Tel + "','" + Address + "','" + InDate + "'," + ContractDate + ", @照片)", con);
cmd.Parameters.Add("照片", SqlDbType.Image);
cmd.Parameters["照片"].Value = imgBuffer;
cmd.ExecuteNonQuery();
ms.Close();
return true;
}
catch
{
return false;
}
finally
{
con.Close();
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一般情况用到 FileStream MemoryStream byte[]OK了。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询