首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

从数据库将图片显示到picturebox上。有一个错误,小弟真的没招了。

2011-12-30 
从数据库将图片显示到picturebox上。有一个异常,小弟真的没招了。高手进!在线等!!这是小弟的图片插入程序:Sq

从数据库将图片显示到picturebox上。有一个异常,小弟真的没招了。高手进!在线等!!
这是小弟的图片插入程序:
  SqlCommand   Command   =   new   SqlCommand(@ "INSERT   INTO   TaskScan   (Task_serialNumber,picture1,picture2,picture3,picture4,picture5,
picture6,picture7,picture8,picture9,picture10)
  VALUES   (@Task_serialNumber,@picture1,@picture2,@picture3,@picture4,@picture5,
@picture6,@picture7,@picture8,@picture9,@picture10) ",   connection,   tran);
    Command.Parameters.Add(new   SqlParameter( "@Task_serialNumber ",   SqlDbType.VarChar,   50));
                       
                        Command.Parameters.Add(new   SqlParameter( "@picture1 ",   SqlDbType.Image,16));
                        Command.Parameters.Add(new   SqlParameter( "@picture2 ",   SqlDbType.Image,   16));
                        Command.Parameters.Add(new   SqlParameter( "@picture3 ",   SqlDbType.Image,   16));
                        Command.Parameters.Add(new   SqlParameter( "@picture4 ",   SqlDbType.Image,   16));
                        Command.Parameters.Add(new   SqlParameter( "@picture5 ",   SqlDbType.Image,   16));

                        Command.Parameters.Add(new   SqlParameter( "@picture6 ",   SqlDbType.Image,   16));
                        Command.Parameters.Add(new   SqlParameter( "@picture7 ",   SqlDbType.Image,   16));
                        Command.Parameters.Add(new   SqlParameter( "@picture8 ",   SqlDbType.Image,   16));
                        Command.Parameters.Add(new   SqlParameter( "@picture9 ",   SqlDbType.Image,   16));
                        Command.Parameters.Add(new   SqlParameter( "@picture10 ",   SqlDbType.Image,   16));
                     
                        bool   bSucceed   =   false;
                        try
                        {
                                Command.Parameters[ "@Task_serialNumber "].Value   =   GetValue(data.Task_serialNumber);

                                Command.Parameters[ "@picture1 "].Value   =   GetValue(data.picture1);
                                Command.Parameters[ "@picture2 "].Value   =   GetValue(data.picture2);
                                Command.Parameters[ "@picture3 "].Value   =   GetValue(data.picture3);


                                Command.Parameters[ "@picture4 "].Value   =   GetValue(data.picture4);
                                Command.Parameters[ "@picture5 "].Value   =   GetValue(data.picture5);

                                Command.Parameters[ "@picture6 "].Value   =   GetValue(data.picture6);
                                Command.Parameters[ "@picture7 "].Value   =   GetValue(data.picture7);
                                Command.Parameters[ "@picture8 "].Value   =   GetValue(data.picture8);
                                Command.Parameters[ "@picture9 "].Value   =   GetValue(data.picture9);
                                Command.Parameters[ "@picture10 "].Value   =   GetValue(data.picture10);
                   
                                if   (Command.ExecuteNonQuery()   ==   0)
                                {
                                        throw   new   Exception( "插入数据失败! ");
                                }
                                tran.Commit();
                                bSucceed   =   true;
                        }
                        catch   (SqlException   ex)
                        {
                                if   (ex.Number   ==   2627)
                                {
                                        throw   new   Exception( "数据库中已经存在相同记录,   无法继续保存! ");
                                }
                                else
                                {
                                        throw   ex;


                                }
                        }
                        finally
                        {
                                if   (!bSucceed)
                                {
                                        tran.Rollback();
                                }
                                connection.Close();
                        }
下满是小弟的图片显示程序:
      DataRowView   dv   =   dt.DefaultView[0];
  Byte[]   p1   =   new   Byte[0],   p2   =   new   Byte[0],   p3   =   new   Byte[0],   p4   =   new   Byte[0],   p5   =   new   Byte[0],
                                              p6   =   new   Byte[0],   p7   =   new   Byte[0],   p8   =   new   Byte[0],   p9   =   new   Byte[0],   p10   =   new   Byte[0];
                         
                                ///在写入图片时一定要写入图片大小.
                                p1   =   (Byte[])(dv.Row[ "picture1 "]);   ///这里是错误提示处
                                MemoryStream   stmBLOBData1   =   new   MemoryStream(p1);
                                pictureBox1.Image   =   Image.FromStream(stmBLOBData1);
                                p2   =   (Byte[])(dv.Row[ "picture2 "]);
                                MemoryStream   stmBLOBData2   =   new   MemoryStream(p2);
                                pictureBox2.Image   =   Image.FromStream(stmBLOBData2);
                                p3   =   (Byte[])(dv.Row[ "picture3 "]);
                                MemoryStream   stmBLOBData3   =   new   MemoryStream(p3);
                                pictureBox3.Image   =   Image.FromStream(stmBLOBData3);


                                p4   =   (Byte[])(dv.Row[ "picture4 "]);
                                MemoryStream   stmBLOBData4   =   new   MemoryStream(p4);
                                pictureBox4.Image   =   Image.FromStream(stmBLOBData4);
                                p5   =   (Byte[])(dv.Row[ "picture5 "]);
                                MemoryStream   stmBLOBData5   =   new   MemoryStream(p5);
                                pictureBox5.Image   =   Image.FromStream(stmBLOBData5);
                                p6   =   (Byte[])(dv.Row[ "picture6 "]);
                                MemoryStream   stmBLOBData6   =   new   MemoryStream(p6);
                                pictureBox6.Image   =   Image.FromStream(stmBLOBData6);
                                p7   =   (Byte[])(dv.Row[ "picture7 "]);
                                MemoryStream   stmBLOBData7   =   new   MemoryStream(p7);
                                pictureBox7.Image   =   Image.FromStream(stmBLOBData7);
                                p8   =   (Byte[])(dv.Row[ "picture8 "]);
                                MemoryStream   stmBLOBData8   =   new   MemoryStream(p8);
                                pictureBox8.Image   =   Image.FromStream(stmBLOBData8);
                                p9   =   (Byte[])(dv.Row[ "picture9 "]);
                                MemoryStream   stmBLOBData9   =   new   MemoryStream(p9);
                                pictureBox9.Image   =   Image.FromStream(stmBLOBData9);
                                p10   =   (Byte[])(dv.Row[ "picture10 "]);
                                MemoryStream   stmBLOBData10   =   new   MemoryStream(p10);
                                pictureBox10.Image   =   Image.FromStream(stmBLOBData10);


这些代码是参考微软的。
可是出现以下错误:
无法将类型为“System.DBNull”的对象强制转换为类型“System.Byte[]”。
小弟应该如何改。拜托各位了!!!

[解决办法]
try
{
this.picWP.Image = Image.FromStream(new System.IO.MemoryStream(GetBin( "select 图片 from 物品表 where cid= ' " + cid + " ' ")));
}
catch
{
this.picWP.Image = null;
}


/// <summary>
///从数据库得到图片数据
/// </summary>
/// <param name= "Sql "> </param>
/// <returns> </returns>
public static byte[] GetBin(string Sql)
{
try
{
DataSet set1 = new DataSet();
//DBbind改用adapter.fill填。
set1 = DBbind(Sql);
if (set1.Tables[0].Rows.Count > 0)
{
byte[] buffer1 = (byte[])set1.Tables[0].Rows[0][0];
return buffer1;
}
return null;
}
catch
{
return null;
}
}


[解决办法]
object obj = dv.Row[ "picture1 "];
if (obj is byte[])
{
p1 = (Byte[])obj; ///这里是错误提示处
}

....

[解决办法]
if(Convert.IsDBNull(dv.Row[ "picture1 "]))
{
//
p1 = (Byte[])(dv.Row[ "picture1 "]);
}
[解决办法]
Command.Parameters.Add(new SqlParameter( "@picture1 ", SqlDbType.Image));//注意不要加长度

热点排行