我已经把图片已经更新到数据库,是独立更新的,我想让照片同像工号那样存进数据库,因为不这样的话,我第一次添加的用户,数据 都为空,只有修改才能生成二进制问题,而且这样,从数据库提取也会出现错误,
m_employee.ID = textID.Text.Trim();
            m_employee.socailId = textSocailId.Text.Trim();
            m_employee.entryDate = dtpEntryDate.Value.ToShortDateString().Trim();
            m_employee.leaveDate = dtpLeaveDate.Value.ToShortDateString().Trim();
            m_employee.email = textEmail.Text.Trim();
            m_employee.comment = textComment.Text.Trim();
            m_employee.photo = //该如何写,photo是image型
 private void btnGetPhoto_Click(object sender, EventArgs e)
        {
            //System.IO.FileStream fs;
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.InitialDirectory = "D:\\";
            openFileDialog.Filter = "图片文件(*.jpg,*.gif,*.bmp)|*.jpg;*.gif;*.bmp";
            openFileDialog.RestoreDirectory = true;//保存当前路径
            openFileDialog.FilterIndex = 1;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string fName = openFileDialog.FileName;
                pbPhoto.Load(fName);//实现图片更改                //图片保存到数据库
                string fullpath = openFileDialog.FileName;//文件路径
                FileStream stream = new FileStream(fullpath, FileMode.Open, FileAccess.Read);
                byte[] photo = new byte[(Int32)stream.Length];
                stream.Read(photo, 0, photo.Length);
                string strSql = string.Format("update Employee set photo = '{0}' where employeeId = '{1}'", photo,m_employeeId);
                SQLServer.SQLInquiry(strSql);
                stream.Close();
}我可以选择照片,有个按钮,我让他直接保存的

解决方案 »

  1.   

    用参数的形式,以byte[]方式写入数据库,你那样拼接字符串是不行的
      

  2.   

    http://kb.cnblogs.com/a/437669/
      

  3.   

    我之前有给一朋友做了一个作业,图片入Access库,用到了两个方法,肯定给你有用
            //ImageToByte(Image img) 将图片转换成二进制代码,然后存储在数据库中
            public static byte[] ImageToByte(Image img)
            {
                byte[] byt = null;
                ImageConverter imgCvt = new ImageConverter();
                object obj = imgCvt.ConvertTo(img, typeof(byte[]));
                byt = (byte[])obj;
                return byt;
            }        //ByteToImage(byte[] byt)读取数据库中的二进制文件将其转换为Image
            public static Image ByteToImage(byte[] bytImage)
            {
                Image img = null;
                ImageConverter imgCvt = new ImageConverter();
                object obj = imgCvt.ConvertFrom(bytImage);
                img = (Image)obj;
                return img;
            }
      

  4.   


      //将PictureBox控件上显示的图片转化为 byte[]
                int bufferSize = 0;
                buffer = null;
                if (this.pbPhoto.Image != null)
                {
                    //ImageConverter im = new ImageConverter();
                    //buffer = (byte[])im.ConvertTo((Image)this.pbPhoto.Image, typeof(byte[]));
                    buffer=ImageToByte(this.pbPhoto.Image);
                    bufferSize = buffer.Length;
                }
               
               string sqlstr = "Update RC_Table set Name=@Name,BirthDay=@BirthDay,Sex=@Sex,ZzMm=@ZzMm,Gz=@Gz,Jl=@Jl,photo=@photo where NumCode=@NumCode";           OleDbParameter[] pa = {
                   new OleDbParameter("@Name",OleDbType.VarChar,20),
                   new OleDbParameter("@BirthDay",OleDbType.Date,8),
                   new OleDbParameter("@Sex",OleDbType.VarChar,2),
                   new OleDbParameter("@ZzMm",OleDbType.VarChar,10),
                   new OleDbParameter("@Gz",OleDbType.Integer,4),
                   new OleDbParameter("@Jl",OleDbType.VarChar,255),
                   new OleDbParameter("@photo",OleDbType.VarBinary,bufferSize),
                   new OleDbParameter("@NumCode",OleDbType.VarChar,20)
                   };           pa[0].Value = this.tbRCName.Text.Trim();
               pa[1].Value = Convert.ToDateTime(this.tbBirth.Text);
               pa[2].Value = this.cbSex.Text;
               pa[3].Value = this.tbZzMm.Text.Trim();
               pa[4].Value = Convert.ToInt32(this.tbGz.Text);
               pa[5].Value = this.tbJl.Text.Trim();
               pa[6].Value = buffer;
               
               pa[7].Value = NumCode;
               if (DataAccess.DataAccess.BuilderQueryCommand(sqlstr, pa))
               {
                   MessageBox.Show("OK");
                   BindRCData();
               }