c winform 上传文件到mysql_C# winform DevExpress上传图片到数据库【转】
實(shí)現(xiàn)功能如下圖:
注明:此文使用的是DevExpress控件,winform 原生控件也是一樣使用方法。
1.點(diǎn)擊選擇圖片按鈕,功能為通過對(duì)話框選擇要上傳的文件,并將該文件在下面的PictureEdit中顯示出來(lái)。具體代碼如下:
private void btnChoosePic_Click(object sender, EventArgs e)
{
ShowPic(pictureEdit1);
}
///
/// 選擇圖片
///
///
public static void ShowPic(PictureEdit picEdit)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.InitialDirectory = @"C:\";
ofd.Filter = "Image Files(*.JPG;*.PNG;*.jpeg;*.GIF;*.BMP)|*.JPG;*.PNG;*.GIF;*.BMP;*.jpeg|All files(*.*)|*.*";
ofd.RestoreDirectory = true;
if (ofd.ShowDialog() == DialogResult.OK)
{
PicAddress = ofd.FileName;
Image imge = Image.FromFile(PicAddress);
Bitmap bm = new Bitmap(imge, picEdit.Width, picEdit.Height);
picEdit.Image = bm;
}
}
ShowPic()方法為靜態(tài)方法,可以直接調(diào)用,其中的PicAddress變量為靜態(tài)全局變量,用于記錄要上傳文件的文件地址。PictureEdit顯示圖片的方式,是通過PictureEdit的image屬性設(shè)定的,將圖片轉(zhuǎn)成Bitmap格式,位圖文件是最簡(jiǎn)單的圖片格式。
2.上傳圖片,該按鈕的功能是將選定的圖片上傳到數(shù)據(jù)庫(kù)中,具體的實(shí)現(xiàn)代碼如下:
///
/// 上傳圖片
///
///
///
private void btnUploadPic_Click(object sender, EventArgs e)
{
if (PicAddress != null)
{
if (PicType.Equals("教師"))
{
var sqlSearch =
$@"select count(*) from studentmanager.picture where PicTypeId = '{TeacherId}'
and PicType='{PicType}'";
var dsSearch = _db.GetResult(sqlSearch);
if (dsSearch.Tables[0].Rows[0][0].ToString().Equals("0")) //沒有重復(fù)的,則進(jìn)行新增插入操作
{
byte[] pic = CommonFunction.GetContent(PicAddress);
var result = _db.SavePictureToDB(pic, PicAddress, PicType, TeacherId);
if (result > 0)
{
CommonFunction.MessageShow("頭像添加成功", "提示", "OK", "Information");
DialogResult = DialogResult.OK;
}
else
{
CommonFunction.MessageShow("頭像添加失敗");
}
}
else
{
//更新頭像
if (PicAddress.Equals(String.Empty))
{
CommonFunction.MessageShow("沒有重新選擇圖片進(jìn)行更新");
return;
}
byte[] pic = CommonFunction.GetContent(PicAddress);
var result = _db.UpdatePictureToDb(pic, PicAddress, PicType, TeacherId);
if (result > 0)
{
CommonFunction.MessageShow("頭像更新成功", "提示", "OK", "Information");
DialogResult = DialogResult.OK;
}
else
{
CommonFunction.MessageShow("頭像更新失敗");
}
}
}
else if(PicType.Equals("學(xué)生"))
{
var sqlSearch =
$@"select count(*) from studentmanager.picture where PicTypeId = '{StudentId}'
and PicType='{PicType}'";
var dsSearch = _db.GetResult(sqlSearch);
if (dsSearch.Tables[0].Rows[0][0].ToString().Equals("0")) //沒有重復(fù)的,則進(jìn)行新增插入操作
{
byte[] pic = CommonFunction.GetContent(PicAddress);
var result = _db.SavePictureToDB(pic, PicAddress, PicType, StudentId);
if (result > 0)
{
CommonFunction.MessageShow("頭像添加成功", "提示", "OK", "Information");
DialogResult = DialogResult.OK;
}
else
{
CommonFunction.MessageShow("頭像添加失敗");
}
}
else
{
//更新頭像
if (PicAddress.Equals(String.Empty))
{
CommonFunction.MessageShow("沒有重新選擇圖片進(jìn)行更新");
return;
}
byte[] pic = CommonFunction.GetContent(PicAddress);
var result = _db.UpdatePictureToDb(pic, PicAddress, PicType, StudentId);
if (result > 0)
{
CommonFunction.MessageShow("頭像更新成功", "提示", "OK", "Information");
DialogResult = DialogResult.OK;
}
else
{
CommonFunction.MessageShow("頭像更新失敗");
}
}
}
}
else
{
CommonFunction.MessageShow("請(qǐng)先選擇圖片!", "提示", "OK", "Error");
}
}
上傳的過程大概就是:根據(jù)文件地址將對(duì)應(yīng)文件轉(zhuǎn)換成數(shù)據(jù)流二進(jìn)制格式–>編寫對(duì)應(yīng)的SQL語(yǔ)句–>執(zhí)行該SQL語(yǔ)句,將圖片添加到數(shù)據(jù)庫(kù)中。
上面代碼中SavePictureToDB方法代碼如下:
///
/// 保存圖片到數(shù)據(jù)庫(kù)
///
///
///
///
///
///
///
public int SavePictureToDB(byte[] imageByte,
string Picturename,
string PicType,
int PicTypeId)
{
var result = 0;
try
{
if (imageByte != null && imageByte.Length != 0)
{
using (var conn = new MySqlConnection())
{
conn.ConnectionString = ConnectionString;
conn.Open();
var insertStr = @"INSERT INTO studentmanager.picture
(
Picturename,
PicType,
PicTypeId,
imageByte
)
VALUES
(
@Picturename,
@PicType,
@PicTypeId,
@imageByte
);";
var comm = new MySqlCommand();
comm.Connection = conn;
comm.CommandText = insertStr;
comm.CommandType = CommandType.Text;
//設(shè)置數(shù)據(jù)庫(kù)字段類型MediumBlob的值為圖片字節(jié)數(shù)組imageByte
comm.Parameters.Add(new MySqlParameter("@imageByte", MySqlDbType.MediumBlob)).Value = imageByte;
comm.Parameters.Add(new MySqlParameter("@Picturename", MySqlDbType.VarChar)).Value = Picturename;
comm.Parameters.Add(new MySqlParameter("@PicType", MySqlDbType.VarChar)).Value = PicType;
comm.Parameters.Add(new MySqlParameter("@PicTypeId", MySqlDbType.Int32)).Value = PicTypeId;
//execute sql
result = comm.ExecuteNonQuery();
comm.Dispose();
conn.Close();
conn.Dispose();
}
}
}
catch (Exception)
{
// throw ex;
}
return result;
}
3.加載圖片顯示到PictureEdit;
///
/// 窗口加載
///
///
///
private void HeadManager_Load(object sender, EventArgs e)
{
LoadImage(PicType, PicType.Equals("教師") ? TeacherId : StudentId);
}
///
/// 獲取圖片
///
///
///
private void LoadImage(string picType, int picTypeid)
{
try
{
var imageBytes = _db.GetImage(picType, picTypeid);
var image = CommonFunction.GetImageByBytes(imageBytes);
Bitmap bm = new Bitmap(image, pictureEdit1.Width, pictureEdit1.Height);
pictureEdit1.Image = bm;
}
catch (Exception)
{
pictureEdit1.Image = Resource.DefaultUser;
}
}
4.用到的公共方法:
///
/// 轉(zhuǎn)換為Byte[]
///
///
///
public static byte[] GetContent(string filepath)//將指定路徑下的文件轉(zhuǎn)換成二進(jìn)制代碼,用于傳輸?shù)綌?shù)據(jù)庫(kù)
{
FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
byte[] byData = new byte[fs.Length];//新建用于保存文件流的字節(jié)數(shù)組
fs.Read(byData, 0, byData.Length);//讀取文件流
fs.Close();
return byData;
}
///
/// 讀取byte[]并轉(zhuǎn)化為圖片
///
/// byte[]
/// Image
public static Image GetImageByBytes(byte[] bytes)
{
Image photo;
using (MemoryStream ms = new MemoryStream(bytes))
{
ms.Write(bytes, 0, bytes.Length);
photo = Image.FromStream(ms, true);
ms.Dispose();
ms.Close();
}
return photo;
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的c winform 上传文件到mysql_C# winform DevExpress上传图片到数据库【转】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java8新特性_JAVA8十大新特性详
- 下一篇: docker 安装mysql 实战文档_