我正在尝试上传图片并将其保存到数据库并给我一个错误
private void Save_Click(object sender, EventArgs e)
{
SqlCommand cmd = connect.CreateCommand();
cmd = new SqlCommand("sp_InsertDepartStaff", connect);
cmd.CommandType = CommandType.StoredProcedure;
try
{
FileStream filestream = new FileStream(picLoc, FileMode.Open, FileAccess.ReadWrite);
BinaryReader binaryreader = new BinaryReader(filestream);
image = binaryreader.ReadBytes((int)filestream.Length);
connect.Open();
//connect.Open();
SqlParameter parm = new SqlParameter("@StaffID", SqlDbType.Int);
parm.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parm);
SqlParameter parm1 = new SqlParameter("@LoginID", SqlDbType.Int);
parm1.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parm1);
SqlParameter parm4 = new SqlParameter("@StaffRoleID", SqlDbType.Int);
parm4.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parm4);
cmd.Parameters.AddWithValue("@FirstName", SqlDbType.NVarChar).Value = firstNameTextBox.Text;
cmd.Parameters.AddWithValue("@LastName", SqlDbType.NVarChar).Value = lastNameTextBox.Text;
cmd.Parameters.AddWithValue("@UserName", SqlDbType.NVarChar).Value = userNameTextBox.Text;
cmd.Parameters.AddWithValue("@Password", SqlDbType.NVarChar).Value = passwordTextBox.Text;
cmd.Parameters.AddWithValue("@Email", SqlDbType.NVarChar).Value = emailTextBox.Text;
cmd.Parameters.AddWithValue("@Phone", SqlDbType.NVarChar).Value = phoneTextBox.Text;
cmd.Parameters.AddWithValue("@StaffRole", SqlDbType.NVarChar).Value = staffRoleTextBox.Text;
cmd.Parameters.AddWithValue("@Department", SqlDbType.NVarChar).Value = departmentTextBox.Text;
cmd.Parameters.Add(new SqlParameter("@ProfilePic", image));
//clear();
cmd.ExecuteNonQuery();
MessageBox.Show("Saved Successfully!");
connect.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
public void upload_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "image files|*.jpg;*.png;*.gif";
ofd.InitialDirectory = "C:\\Users\\maria.ngako\\Desktop\\Icons";
ofd.FileName.ToString();
DialogResult dr = ofd.ShowDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
profilePicPictureBox.Image = Image.FromFile(ofd.FileName);
picLoc = ofd.FileName.ToString();
profilePicPictureBox.ImageLocation = picLoc;
}
}
答案 0 :(得分:4)
您忘了关闭该文件。
解决问题的最佳方法
由于您只是从文件中读取所有字节,因此您可以这样做:
image = File.ReadAllBytes(picLoc);
替代方法
否则,您可以更改此代码:
FileStream filestream = new FileStream(picLoc, FileMode.Open, FileAccess.ReadWrite);
BinaryReader binaryreader = new BinaryReader(filestream);
image = binaryreader.ReadBytes((int)filestream.Length);
对此:
using (FileStream filestream = new FileStream(picLoc, FileMode.Open, FileAccess.ReadWrite))
{
BinaryReader binaryreader = new BinaryReader(filestream);
image = binaryreader.ReadBytes((int)filestream.Length);
}
这将确保文件流关闭 - 即使在读取文件时出现异常。
或者,由于关闭BinaryReader
也会关闭其基础流,您可以这样做:
using (BinaryReader binaryreader = new BinaryReader(new FileStream(picLoc, FileMode.Open, FileAccess.ReadWrite)))
{
image = binaryreader.ReadBytes((int)filestream.Length);
}
作为旁注:您正在使用ReadWrite
访问权限打开文件。通常,您应该打开访问要求最低的文件;在这种情况下,您只是阅读它们,因此您应该使用FileAccess.Read
。
答案 1 :(得分:2)
您忘了关闭FileStream
,这就是为什么在尝试再次打开时出错的原因。
filestream.Close();
或
using(FileStream filestream = new FileStream(picLoc, FileMode.Open, FileAccess.ReadWrite))
{
//Do operations here
}