2014-02-26 124 views
0

我想从我的Access数据库中获取图片到一个图片框。 但是,当我试图填补我的DataRow白衣DataSet中我得到以下错误:未将对象引用设置为对象的实例。错误

Object reference not set to an instance of an object

任何帮助,将不胜感激! 我有以下代码:

 OleDbConnection conn = new OleDbConnection(constr); 
     conn.Open(); 

     string cmdstr = "SELECT Picture FROM Gegevens WHERE ID =" + id; 
     OleDbCommand cmd = new OleDbCommand(cmdstr, conn);   
     OleDbDataAdapter da = new OleDbDataAdapter(cmd); 

     DataSet ds = new DataSet(); 
     da.Fill(ds, "picture"); 

     DataRow dr = ds.Tables["Pictures"].Rows[0]; //Here i get the error! 

     byte[] result = (byte[])dr["Picture"]; 
     int ArraySize = result.GetUpperBound(0); 

     MemoryStream ms = new MemoryStream(result, 0, ArraySize); 
     Picturebox1.Image = Image.FromStream(ms); 

     conn.Close(); 

回答

1

的ds.Tables [“图片”]返回空值,所以你不能让行。尝试:

ds.Tables[0].Rows[0]; 

ds.Tables["picture"].Rows[0]; 
0

您需要检查数据集是否为空或不使用它之前

尝试这样

 OleDbConnection conn = new OleDbConnection(constr); 
     conn.Open(); 

     string cmdstr = "SELECT Picture FROM Gegevens WHERE ID =" + id; 
     OleDbCommand cmd = new OleDbCommand(cmdstr, conn);   
     OleDbDataAdapter da = new OleDbDataAdapter(cmd); 

     DataSet ds = new DataSet(); 
     da.Fill(ds, "picture"); 

     if (ds != null && Data.Tables[0].Rows.Count > 0) 
     { 
     DataRow dr = ds.Tables["Pictures"].Rows[0]; //Here i get the error! 

     byte[] result = (byte[])dr["Picture"]; 
     int ArraySize = result.GetUpperBound(0); 

     MemoryStream ms = new MemoryStream(result, 0, ArraySize); 
     Picturebox1.Image = Image.FromStream(ms); 
     } 
     conn.Close(); 
相关问题