存取图片的问题,把图片从文件类型变成byte[]类型存储到字段类型为image的数据库中,然后从数据库中读取出来,显示在图片框中,但是Bitmap bmp = new Bitmap(ms);这句话总是提示“参数无效”,不知道是什么原因?网上的大部分代码我都看过了,都不行,我的是Winform

解决方案 »

  1.   

    上面错了!应该用SqlDataReader的GetBytes函数过滤头文件
      

  2.   

    保存到数据库里的 值不是保存的时候丢了 就是取的时候丢了.
    反信息不是图形或则图形信息被破坏
    (using SqlConnection conn=new SqlConnection(""))
    {
    string strSql="select photo from Tb"; 
    SqlCommand cmd=new SqlCommand(strSql,conn); 
    conn.Open(); 
    SqlDataReader reader=cmd.ExecuteReader(); 
    if(reader.Read())

    MemoryStream ms=new MemoryStream((byte[])reader["Photo"]); 
    Image image=Image.FromStream(ms,true); 
    picturebox1.Image=image;
    }
    reader.Close(); 
    conn.Close(); 
    }
    http://topic.csdn.net/u/20090223/12/d67acacb-48f9-4cd0-9b0e-006704e81e92.html
      

  3.   

    byte[] imagebytes = null;                 //打开数据库             SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=;database=db_05");                 con.Open();                 SqlCommand com = new SqlCommand("select top 1* from tb_09", con);                 SqlDataReader dr = com.ExecuteReader();                 while (dr.Read())                 {                     imagebytes = (byte[])dr.GetValue(1);                 }                 dr.Close();                 com.Clone();                 con.Close();                 MemoryStream ms = new MemoryStream(imagebytes);                 Bitmap bmpt = new Bitmap(ms);                 pictureBox1.Image = bmpt; 
      

  4.   

    C#的代码暂时没有,VB的代码有,跟你贴VB的参考一下吧:
    '保存图片到数据库中(利用数据流)
    Public Sub SaveImageToDB(ByRef fld As ADODB.Field, file As String)
        Dim c As New ADODB.Stream
        
        On Error GoTo ErrSave
        '如果文件不存在,则不用保存
        If FileExists(file) = False Then Exit Sub
        '利用数据流保存到数据库中
        c.Mode = adModeReadWrite
        c.Type = adTypeBinary
        c.Open
        c.LoadFromFile file
        fld.Value = c.Read()
        c.Close
        Exit Sub
    ErrSave:
        If Err.Number <> 0 Then
            MsgBox Err.Number & ";" & Err.Description, vbInformation + vbOKOnly, "存储图片"
        End If
    End SubPublic Sub LoadImageFromDB(ByVal fld As ADODB.Field, objPic As Object)
        Dim c As New ADODB.Stream
        Dim strFile As String
        
        On Error GoTo errLoad
        '如果图片内容为空
        If IsNull(fld.Value) Then
            objPic.Picture = LoadPicture("")
            Exit Sub
        End If
        '开始从数据库中读取图片
        c.Mode = adModeReadWrite
        c.Type = adTypeBinary
        c.Open
        c.Write (fld.Value)
        '生成临时文件路径
        strFile = g_WinDir & "\Temp"
        Call fCreateDir(strFile)
        strFile = strFile & "\~" & GetString(False) & ".tmp"
        If FileExists(strFile) Then Kill (strFile)
        c.SaveToFile strFile, adSaveCreateOverWrite
        objPic.Picture = LoadPicture(strFile)
        '删除临时文件
        Kill strFile
        Exit Sub
    errLoad:
        If Err.Number = 481 Then
            Set objPic.Picture = LoadPicture("")
        Else
            If Err.Number <> 0 Then
                MsgBox Err.Number & ";" & Err.Description, vbInformation + vbOKOnly, "加载图片"
            End If
        End If
    End Sub
      

  5.   

    http://lvzhh.spaces.live.com/Blog/cns!A3FF5E9BC63098A6!787.entry
    这是偶们老师的博客,他写的一篇文章,图片从数据库里读取的,
    已经试验过,可以读取,
    可以去看看
      

  6.   

     /// 功能:根据员工代码得到员工照片
            /// </summary>
            /// <param name="YuanGongDaiMa">员工代码</param>
            /// <returns></returns>
            public MemoryStream Select_TuPian(int YuanGongDaiMa)
            {
                try
                {
                    //MemoryStream ii = new MemoryStream();
                    using (SqlConnection con = Con.GetConnect())
                    {
                        con.Open();
                        SqlCommand cmd = new SqlCommand();
                        cmd.CommandText = "Select_YuanGongZhaoPian";
                        cmd.CommandTimeout = 0;
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Connection = con;
                        cmd.Parameters.Add("@YuanGongDaiMa", SqlDbType.Int);
                        cmd.Parameters["@YuanGongDaiMa"].Value = YuanGongDaiMa;
                        SqlDataReader reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            buf = new MemoryStream((byte[])reader["ZhaoPianXinXi"]);
                        }
     
                    }
                    return buf;
                }
                catch
                {
                    return null;
                }        }
     MemoryStream kk = YGXX.Select_TuPian(YuanGongDaiMa);
                    if (kk!=null)
                    {
                        if (kk.Length>5)
                        {
                            Image Pictrue = Image.FromStream(kk, true);
                            pictureBox1.Image = Pictrue;
                        }
                    }
      

  7.   

    上面是从数据库里查询出来的,
    这是保存到数据库的
    if (openFileDialog1.FileName.ToString(). != "")
                {
                    FileStream fs = new FileStream(openFileDialog1.FileName.ToString().Trim(), FileMode.Open, FileAccess.Read);
                    ib = new byte[fs.Length];
                    fs.Read(ib, 0, (int)fs.Length);
                }
                else { ib = new byte[0]; }  cmd.Parameters.Add("@ZhaoPianXinXi", SqlDbType.Image);
                        cmd.Parameters["@ZhaoPianXinXi"].Value = ZhaoPianXinXi;