据库结构
create table test
{
id int identity(1,1),
FImage image
}
相关的存储过程
Create proc UpdateImage (@UpdateImage Image)
As
Insert Into test (FImage) values (@UpdateImage)
GO
OpenFileDialog openfileDialog = new OpenFileDialog();
openfileDialog.Filter = "Picture Files(*.jpg)|*.jpg|Bmp(*.bmp)|*.bmp|All Files(*.*)|*.*";
FileStream fileStream;
openfileDialog.ShowDialog();
string filepath = openfileDialog.FileName;
if (filepath.Trim() != "")
{
//获得图象并把图象转换为byte[]
fileStream = new FileStream(filepath, FileMode.Open, FileAccess.Read);
byte[] photoArray = new byte[(int)fileStream.Length];
fileStream.Read(photoArray, 0, photoArray.Length);
fileStream.Close();
try
{
pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
pictureBox1.Image = System.Drawing.Image.FromFile(filepath);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
//连接数据库
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString ="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
SqlCommand mySqlCommand = new SqlCommand("UpdateImage", myConnection);
mySqlCommand.CommandType = CommandType.StoredProcedure;
mySqlCommand.Parameters.Add("@UpdateImage", SqlDbType.Image);
mySqlCommand.Parameters["@UpdateImage"].Value = photoArray;
//如果不使用存储过程,可以把上面四句代码改为:
//string strSql="Insert into test(FImage) values(@FImage)";
//SqlCommand cmd=new SqlCommand(strSql,conn);
//cmd.Parameters.Add("@FImage",SqlDbType.Image);
//cmd.Parameters["@FImage"].Value=photoArray;
myConnection.Open();
mySqlCommand.ExecuteNonQuery();
myConnection.Close();
}
//以下是从数据库读取图片
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
string strSql = "select FImage from test where id=1";
SqlCommand cmd = new SqlCommand(strSql, conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
MemoryStream ms = new MemoryStream((byte[])reader["FImage"]);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
reader.Close();
conn.Close();
pictureBox1.Image = image;