MemoryStream ms = new MemoryStream(); 
Image image = null;
ms = new MemoryStream((byte[])reader["C_LOGO"]);
image = Image.FromStream(ms);  //客户LOGO图片--->老是提示参数无效
 panel_logo.BackgroundImage = image;

解决方案 »

  1.   

    不是读取的问题
    是插入的问题插入的时候也用MemoryStream 的吧!
    用GetBuffer()方法来来得到图片的byte[]形式插入数据库
    读取就没问题了
      

  2.   

    使用ImageConverter来转一下试试。
      

  3.   

            private void button1_Click(object sender, EventArgs e)
            {
                Stream ms;
                byte[] picbyte;
                OpenFileDialog ofdSelectPic = new OpenFileDialog();
                ofdSelectPic.ShowDialog();
                string f = ofdSelectPic.FileName;            ms = ofdSelectPic.OpenFile();
                picbyte = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(picbyte, 0, Convert.ToInt32(ms.Length));            SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=s");
                conn.Open();
                string sqlstring = "insert into ttt(image) values(@img)";
                SqlCommand cmd = new SqlCommand(sqlstring, conn);
                cmd.Parameters.Add("@img", SqlDbType.Image, picbyte.Length).Value = picbyte;            cmd.ExecuteNonQuery();
                conn.Close();
            }        private void button2_Click(object sender, EventArgs e)
            {
                SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=s");
                conn.Open();
                string strSql = "select image from ttt ";
                SqlCommand cmd = new SqlCommand(strSql, conn);
                SqlDataReader sdr = cmd.ExecuteReader();
                sdr.Read();
                MemoryStream ms = new MemoryStream((byte[])sdr[0]);
                Image image = Image.FromStream(ms);
                sdr.Close();
                conn.Close();
                pictureBox1.Image = image;
            }
    按钮1插入,按钮2提取,我这段代码在CSDN上已经挣了N多分了,你参考一下。
      

  4.   

    我的代码是这样子的:
    存入:
     byte[] c_picbyte = new byte[0];
            private void btn_c_openfile_Click(object sender, EventArgs e)
            {
                if (ofdSelectPic.ShowDialog() == DialogResult.OK)
                {
                    if ((ofdSelectPic.OpenFile()) != null)
                    {
                        if (this.pic_C_Logo.Image != null)
                        {
                            this.pic_C_Logo.Image.Dispose();
                            this.pic_C_Logo.Image = null;
                        }
                        pic_C_Logo.Image = Image.FromFile(ofdSelectPic.FileName); //显示图片
                        FileStream fs = new FileStream(ofdSelectPic.FileName, FileMode.OpenOrCreate, FileAccess.Read);
                        c_picbyte = new byte[fs.Length];
                        fs.Read(c_picbyte, 0, System.Convert.ToInt32(fs.Length));
                        fs.Close();
                        //c_ms.Close();
                    }
                }          }
      private void SaveDB() 
            {
                SqlParameter[] parameters = 
                        {  
                         new SqlParameter("U_C_COMPANYNAME",SqlDbType.VarChar,255),
                         new SqlParameter("U_C_LOGO",SqlDbType.Image,c_picbyte.Length),
                         new SqlParameter("U_C_ADDRESS",SqlDbType.VarChar,255),
                         new SqlParameter("U_C_TELEPHONE",SqlDbType.VarChar,255),
                         new SqlParameter("U_C_LINKER",SqlDbType.VarChar,255),
                         new SqlParameter("U_COMPANYNAME",SqlDbType.VarChar,255),
                         new SqlParameter("U_LOGO",SqlDbType.Image,picbyte.Length),
                         new SqlParameter("U_ADDRESS",SqlDbType.VarChar,255),
                         new SqlParameter("U_TELEPHONE",SqlDbType.VarChar,255),
                         new SqlParameter("U_LINKER",SqlDbType.VarChar,255),
                         new SqlParameter("U_SOFTNAME",SqlDbType.VarChar,255),
                         new SqlParameter("U_INITPASSWORD",SqlDbType.VarChar,255),                     new SqlParameter("U_A_DOMAINNAME",SqlDbType.VarChar,255),
                         new SqlParameter("U_A_SERVERNAME",SqlDbType.VarChar,255),
                         new SqlParameter("U_A_USERNAME",SqlDbType.VarChar,255),
                         new SqlParameter("U_A_PASSWORD",SqlDbType.VarChar,255),
                         new SqlParameter("U_A_FILEDIRECTORY",SqlDbType.VarChar,255),
                         new SqlParameter("U_SYS_TYPE",SqlDbType.VarChar,10),
                        };
                MES.BusBll.Public.MES_Encrpytion Encrpytion = new MES.BusBll.Public.MES_Encrpytion(MES.BusBll.Public.EncrypType.COMPANY);
                //Encrpytion.Encrypto(this.textBox1.Text); //加密
                parameters[0].Value = Encrpytion.Encrypto(txt_c_company.Text);
                parameters[1].Value = c_picbyte;
                parameters[2].Value = Encrpytion.Encrypto(txt_c_address.Text);
                parameters[3].Value = Encrpytion.Encrypto(txt_c_tel.Text);
                parameters[4].Value = Encrpytion.Encrypto(txt_c_linker.Text);
                parameters[5].Value = Encrpytion.Encrypto(txt_company.Text);
                parameters[6].Value = picbyte;
                parameters[7].Value = Encrpytion.Encrypto(txtaddress.Text);
                parameters[8].Value = Encrpytion.Encrypto(txt_tel.Text);
                parameters[9].Value = Encrpytion.Encrypto(txt_linker.Text);
                parameters[10].Value = Encrpytion.Encrypto(txtSOFTNAME.Text);
                parameters[11].Value = Encrpytion.Encrypto(utxtpsw.Text);            parameters[12].Value = ""; //Encrpytion.Encrypto(txtdomain.Text);
                parameters[13].Value = ""; //Encrpytion.Encrypto(txtservername.Text);
                parameters[14].Value = ""; //Encrpytion.Encrypto(txtuser.Text);
                parameters[15].Value = ""; //Encrpytion.Encrypto(txtuserpwd.Text);
                parameters[16].Value = ""; //Encrpytion.Encrypto(txtcatalog.Text);
                parameters[17].Value = Common.SystemType;
                DAO.GetDAO().ExecuteProc("P_T_CO_COMPANY_UPDATE", parameters);
            }
      

  5.   

    取出:
     string sql = string.Format(@"select * from {0}.T_CO_COMPANY where sys_type = '{1}'", Common.DBUserName,Common.SystemType);
                SqlDataReader reader = DAO.GetDAO().GetDataReader(sql);
                if (!reader.Read())
                {
                    reader.Close();
                    return;
                }
                MemoryStream ms=new MemoryStream();
                Image image = null;
                byte[] by = new byte[0];
                if (reader["C_LOGO"].ToString() != "")  //&& (reader["C_LOGO"].ToString() != "System.Byte[]")
                {       
                     ms = new MemoryStream((byte[])reader["C_LOGO"]);
                   
                    if (ms.Capacity > 0)
                    {
                        image = Image.FromStream(ms);                    panel_logo.BackgroundImage = image;
                        
                    }                
                }
      

  6.   

    好像跟上面的4 楼差不多呀,可是不知道为什么就是提示报参数无效
     image = Image.FromStream(ms); 
      

  7.   

     pic_C_Logo.Image = Image.FromFile(ofdSelectPic.FileName); //显示图片 
                        FileStream fs = new FileStream(ofdSelectPic.FileName, FileMode.OpenOrCreate, FileAccess.Read); 
                        c_picbyte = new byte[fs.Length]; 
                        fs.Read(c_picbyte, 0, System.Convert.ToInt32(fs.Length)); 这里错了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~假设有一个流,内存流或文件流均可叫做ms
    你的目标图片是img,这是一个bitmapimg.Save(ms,  System.Drawing.Imaging.ImageFormat.Jpeg);
    byte [] 你的目标数组= ms.GetBuffer();不要用read方法读流就对了
      

  8.   

    他的数据库中图片存放的是Image 类型 不是byte类型的
      

  9.   

     new SqlParameter("U_C_LOGO",SqlDbType.Image,16),  这样看....不行跟到 ExecuteProc里看看 到底执行了什么...
       pic_C_Logo.Image = Image.FromFile(ofdSelectPic.FileName); //显示图片 
                        FileStream fs = new FileStream(ofdSelectPic.FileName, FileMode.OpenOrCreate, FileAccess.Read); 
                        c_picbyte = new byte[fs.Length]; 
                        fs.Read(c_picbyte, 0, System.Convert.ToInt32(fs.Length)); 
                        fs.Close(); 
    这样读图是没问题的.
      

  10.   

    另外看你代码 U_C_LOGO 才是你存放的东西 C_LOGO的哪个byte不知道你那取的.
      

  11.   

    SqlCommand cmd = new SqlCommand(sqlstring, conn);
    SqlParameter parm = new SqlParameter("@img",SqlDbType.Image,picbyte.Length);
    parm.value=picbyte;
    cmd.Parameters.Add(parm);
    cmd.ExecuteNonQuery();
    这样就是正确的,我测试过