如何使用C#在ASP.NET中将二进制图像显示到gridview中?

我想将二进制图像显示到名为’gvExistedCharacter’的网格视图中。 我做过关于它的研究,其中许多建议使用处理程序。 但是,我不知道我该怎么做。

仅供参考:数据库中图像的数据类型为image,名为“blueBallImage”。 我还想在同一个gridview中显示它的int级别。

我试过了

SqlConnection con = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyCloudGames;Integrated Security=True"); SqlCommand cmd = new SqlCommand("Select blueBallImage FROM CorrespondingBall", con); cmd.CommandType = System.Data.CommandType.Text; cmd.Connection = con; SqlParameter ImageID = new SqlParameter("@characterID", System.Data.SqlDbType.Int); ImageID.Value = context.Request.QueryString["characterID"]; cmd.Parameters.Add(ImageID); con.Open(); SqlDataReader dReader = cmd.ExecuteReader(); dReader.Read(); context.Response.BinaryWrite((byte[])dReader["Image"]); dReader.Close(); con.Close(); 

我收到错误“参数化查询”(@characterID int)选择blueBallImage FROM CorrespondingBall’需要参数’@characterID’,这是未提供的。“

您可以使用处理程序在gridview中显示图像,您的html标记看起来像在里面

Gridview ItemTemplate将图像控制src设置为src=~/ShowImage.ashx?id=" + id

其中ShowImage.ashx是返回MemoryStream((byte [])img)的处理程序;

这里我的一篇类似文章如何获取二进制数据并显示为图像

博客文章:将二进制数据转换为图像,从二进制数据保存和检索图像asp.net c#

在您的情况下,您的查询字符串是characterID

所以你的图像src将是src=~/ShowImage.ashx?id=" + characterID


更新答案:

Html标记:

                    

代码背后:

 protected void Page_Load(object sender, EventArgs e) { DataTable dt = getData(); GridView1.DataSource = dt; GridView1.DataBind(); } public DataTable getData() { SqlDataAdapter dap = new SqlDataAdapter("select characterID,blueBallImage,gameLevel from CorrespondingBall", cn); DataSet ds = new DataSet(); dap.Fill(ds); return ds.Tables[0]; } 

通用处理程序:在这里添加新的通用处理程序showIamges.ashx是我的通用处理程序

 public void ProcessRequest(HttpContext context) { Int32 my_Id; if (context.Request.QueryString["getID"] != null) { my_Id = Convert.ToInt32(context.Request.QueryString["getID"]); context.Response.ContentType = "image/jpeg"; Stream strm = ShowEmpImage(my_Id); byte[] buffer = new byte[4096]; int byteSeq = strm.Read(buffer, 0, 4096); while (byteSeq > 0) { context.Response.OutputStream.Write(buffer, 0, byteSeq); byteSeq = strm.Read(buffer, 0, 4096); } } } public Stream ShowEmpImage(int my_Id) { string conn = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; SqlConnection connection = new SqlConnection(conn); string sql = "select blueBallImage from CorrespondingBall WHERE characterID = @ID"; SqlCommand cmd = new SqlCommand(sql, connection); cmd.CommandType = CommandType.Text; cmd.Parameters.AddWithValue("@ID", my_Id); connection.Open(); object img = cmd.ExecuteScalar(); return new MemoryStream((byte[])img); } 

您希望将@characterID参数添加到sql命令,但您的命令没有名为@characterID的参数。

删除代码中的参数进程或在sql命令中添加@characterID以尝试匹配。