问题描述
需要将本地图片作为用户头像上传到数据库,同时要从数据库中读取到图片。
解决
图片转为二进制后存入到数据库中,从数据库从取出时以流的形式设置到PictrueBox的image中
存入数据库
转换操作
string filePath = T_photo.Text.Trim();
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] byteFile = new byte[fs.Length];
fs.Read(byteFile, 0, (int)fs.Length);
fs.Close();
try
{
SqlHelper sqlHelper = new SqlHelper(); //自己写的一个类
sqlHelper.insertUserInfo(byteFile);
P_box.Image = Image.FromFile("");
}
数据库插入操作
使用SqlParameter方法存入才能正确将二进制存入
之前使用string.Format方法存入的时候失败了
public void insertUserInfo(byte[] byteFile)
{
string sqlStr = "insert into tb_test(img) values(@p)";
SqlParameter a = new SqlParameter("@p",byteFile);
SqlCommand sqlcom = new SqlCommand(sqlStr, sqlcon);
sqlcom.Parameters.Add(a);
int i = sqlcom.ExecuteNonQuery();
if (i > 0)
{
MessageBox.Show("insert successful");
}
else
{
MessageBox.Show("insert fail");
}
sqlcon.Close();
}
本地选择图片文件的方法
Winfrom日记———图片选择并判断图片大小
数据库读取
转换操作
try
{
SqlHelper sqlHelper = new SqlHelper();
DataTable data = sqlHelper.selectUserInfo();
byte[] fileByte = (Byte[])data.Rows[0][1];
MemoryStream ms = new MemoryStream(fileByte, 0, fileByte.Length);
P_box.Image = Image.FromStream(ms); MessageBox.Show("555");
ms.Close();
}
catch
{
MessageBox.Show("image update failed");
}
数据库查询操作
public DataTable selectUserInfo()
{
string sqlStr = string.Format("select * from tb_test where id={0}", 2);
SqlCommand sqlcom = new SqlCommand(sqlStr, sqlcon);
SqlDataAdapter ds = new SqlDataAdapter(sqlcom);
DataTable data = new DataTable();
ds.Fill(data);
sqlcon.Close();
return data;
}
大致操作就是这样,SqlHelper是自己写的一个类,构造方法直接连接数据库打开数据库,具体不展示了。有问题大家一起讨论。