C# 从SQL中的二进制数据检索图像到DataList

C# 从SQL中的二进制数据检索图像到DataList,c#,asp.net,sql-server,visual-studio-2010,C#,Asp.net,Sql Server,Visual Studio 2010,我正在做一个三层应用程序来从sql server检索图像,我将图像存储到sql中的二进制数据中,问题是我无法从sql server检索图像 这是我在DataAccessLayer中的代码 public List<Volunteer> VolunteerTRetrieve() { List<Volunteer> vList = new List<Volunteer>(); byte[] volunteerProfile

我正在做一个三层应用程序来从sql server检索图像,我将图像存储到sql中的二进制数据中,问题是我无法从sql server检索图像

这是我在DataAccessLayer中的代码

  public List<Volunteer> VolunteerTRetrieve()
    {
        List<Volunteer> vList = new List<Volunteer>();
        byte[] volunteerProfilePicture;
        string volunteerName, volunteerNRIC, volunteerAddress, volunteerEmail, volunteerContact;
        string queryStr = "SELECT * FROM TVolunteer Order By VolunteerName";
        SqlConnection conn = new SqlConnection(DBconnStr);
        SqlCommand cmd = new SqlCommand(queryStr, conn);
        conn.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        while ((dr.Read()))
        {
            volunteerName = dr["VolunteerName"].ToString();
            volunteerNRIC = dr["VolunteerNRIC"].ToString();
            volunteerAddress = dr["VolunteerAddress"].ToString();
            volunteerEmail = dr["VolunteerEmail"].ToString();
            volunteerContact = dr["VolunteerContact"].ToString();
            volunteerProfilePicture = (byte[])dr["VolunteerProfilePicture"];

            vList.Add(new Volunteer(volunteerName, volunteerNRIC, volunteerAddress, volunteerEmail, volunteerContact, volunteerProfilePicture));
        }
        conn.Close();
        dr.Dispose();
        return vList;
    }

请帮忙,谢谢

如果您返回一个图像,可以使用以下命令

1. place a PictureBox control on the asp.net webpage
2. define the sql connections //not sure why you are using cmd.prepare

byte[] sqlImage = (byte[])cmd.ExecuteScalar();
MemoryStream memStream = new MemoryStream();
memStream.Write(sqlImage, 0, sqlImage.Length);
Bitmap bit = new Bitmap(memStream);
或者如果你想用另一种方式

  try

  {

    con = new SqlConnection(constr);
    cmd = new SqlCommand("select photopath,Photo from employees where employeeid=14", con);
    con.Open();
    dr = cmd.ExecuteReader();
            while(dr.Read())
            {
                if (!dr.IsDBNull(1))
                {
                    byte[] photo = (byte[])dr[1];
                    MemoryStream ms = new MemoryStream(photo);
                    pictureBox1.Image = Image.FromStream(ms);
                }


            }
        }
        catch (Exception ex)
        {
            dr.Close();
            cmd.Dispose();
            con.Close();

            Response.Write(ex.Message);
        }

在asp.net网页上,是否有PictureBox控件。。?你需要从sql查询中返回多少张图片…?我需要为数据列表中的每个不同志愿者返回至少一张图片你需要在While循环中执行dr.Read(),然后看看我的示例,看看这是否有效。我在数据访问层上做了这件事(如上图所示)但是它不起作用,请检查此stackoverflow链接以了解其他示例
public class ShowImage : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["DBconnStr"].ConnectionString;
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        string queryStr = "SELECT VolunteerProfilePicture FROM TVolunteer WHERE VolunteerNRIC = @NRIC";
        SqlCommand cmd = new SqlCommand(queryStr, conn);
        cmd.Parameters.Add("@NRIC", SqlDbType.VarChar).Value =
            context.Request.QueryString["VolunteerNRIC"];
        cmd.Prepare();
        SqlDataReader dr = cmd.ExecuteReader();
        dr.Read();
        context.Response.BinaryWrite((byte[])dr["VolunteerProfilePicture"]);
    }
1. place a PictureBox control on the asp.net webpage
2. define the sql connections //not sure why you are using cmd.prepare

byte[] sqlImage = (byte[])cmd.ExecuteScalar();
MemoryStream memStream = new MemoryStream();
memStream.Write(sqlImage, 0, sqlImage.Length);
Bitmap bit = new Bitmap(memStream);
  try

  {

    con = new SqlConnection(constr);
    cmd = new SqlCommand("select photopath,Photo from employees where employeeid=14", con);
    con.Open();
    dr = cmd.ExecuteReader();
            while(dr.Read())
            {
                if (!dr.IsDBNull(1))
                {
                    byte[] photo = (byte[])dr[1];
                    MemoryStream ms = new MemoryStream(photo);
                    pictureBox1.Image = Image.FromStream(ms);
                }


            }
        }
        catch (Exception ex)
        {
            dr.Close();
            cmd.Dispose();
            con.Close();

            Response.Write(ex.Message);
        }