none
WINFORM链接数据库里的image RRS feed

  • 问题

  • 我用的picturebox加载数据库中的image,但是报错如下,求教是什么原因:

    System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'

    代码如下:

    byte[] imagebytes = null;
    SqlConnection con = new SqlConnection(@"server=JIA;database=AX;user id=ax;password=s4");
    con.Open();
    SqlCommand com = new SqlCommand("select image from Document where name = '" + textBox1.Text + "'", con);
    SqlDataReader dr = com.ExecuteReader();
    while (dr.Read())
    {
     imagebytes = (byte[])dr.GetValue(1);
     }
      dr.Close();
      com.Clone();
      con.Close();
      System.IO.MemoryStream ms = new System.IO.MemoryStream(imagebytes);
       Bitmap bmpt = new Bitmap(ms);
       pictureBox1.Image = bmpt;

    另外能够不使用picturebox,直接打开数据库里的image吗???比方我点击一个button就能直接打开数据库中的image。谢谢大神

    2018年5月11日 1:00

全部回复

  • imagebytes = (byte[])dr.GetValue(1);

    额这句应该是 imagebytes = (byte[])dr.GetValue(0);把你是select image 。。。。

    那么结果集应该只有image这一个列吧

    2018年5月11日 4:18
  • 你好,

    >>另外能够不使用picturebox,直接打开数据库里的image吗???比方我点击一个button就能直接打开数据库中的image。谢谢大神

    Winforms 不能直接打开图片,需要通过控件在加载 和渲染。

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年5月11日 6:58
    版主
  • emmmmm,,,,,,还是报错了,说是Bitmap bmpt = new Bitmap(ms);这句的参数是无效的System.ArgumentException: 'Parameter is not valid.'
    2018年5月16日 1:34
  • 你好,

    试试下面的方法,直接使用Image.FromStream 方法。

    byte[] imagebytes = null;
    SqlConnection con = new SqlConnection(@"server=JIA;database=AX;user id=ax;password=s4");
    con.Open();
    SqlCommand com = new SqlCommand("select image from Document where name = '" + textBox1.Text + "'", con);
    SqlDataReader dr = com.ExecuteReader();
    while (dr.Read())
    {
     imagebytes = (byte[])dr.GetValue(1);
     }
      dr.Close();
      com.Clone();
      con.Close();
      System.IO.MemoryStream ms = new System.IO.MemoryStream(imagebytes);
       //Bitmap bmpt = new Bitmap(ms);
       pictureBox1.Image = Image.FromStream(ms);
    
    }

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年5月16日 2:24
    版主
  • imagebytes = (byte[])dr.GetValue(1);

    这句话报错了System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'

    是不是因为我数据库里图片存的是十六进制格式所以还需要转化一步byte[]?

    2018年5月16日 9:02
  • SqlDataAdapter dataAdapter = new SqlDataAdapter(new SqlCommand("SELECT pic FROM imageTest WHERE pic_id = 1", yourConnectionReference));

    DataSet dataSet = new DataSet(); dataAdapter.Fill(dataSet); if (dataSet.Tables[0].Rows.Count == 1) { Byte[] data = new Byte[0]; data = (Byte[])(dataSet.Tables[0].Rows[0]["pic"]); MemoryStream mem = new MemoryStream(data); yourPictureBox.Image= Image.FromStream(mem); }


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年5月17日 0:13
  • 同样是报错最后一句参数无效
    System.ArgumentException: 'Parameter is not valid.'

    2018年5月17日 1:39
  • 你好,

    可以提供你的数据吗? 是所有的图片都不能显示,还是部分图片,请重现上次一张小的图片试试看,如果问题还存在的话,我建议你建一个可以重现问题的小demo及相关的数据库,并上传到OneDrive, 然后把下载链接发到这里。

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年5月17日 1:49
    版主
  • 你好,

    因为我并不能操作这个数据库只能读取,所以不能用小的图片测试一下是不是我数据库内的图片问题,

    数据库内的图片存的是是十六进制的形式,图片也确实比较大,打印下来大概有三四张A4纸的大小,请问这样的大小能有办法解决吗?

    因为这个数据库内的图片是老板定死的,所以即使代码能用在小图片上但不适用我需要的图片的话,也是没用的。

    O(∩_∩)O感谢帮忙想办法

    2018年5月17日 3:29