C# 从SQL数据库asp.net C加载图片#

C# 从SQL数据库asp.net C加载图片#,c#,asp.net,sql,image,linq-to-sql,C#,Asp.net,Sql,Image,Linq To Sql,我的头像存储在数据库中。我使用了数据类型图像作为化身。我想将用户的化身加载到图像控件中,但我无法使其工作。我已尝试过此代码,但没有任何运气: public void GetUserAvatar() { string username = Convert.ToString(Session["username"]); var image = from u in dc.Users where u.username ==

我的头像存储在数据库中。我使用了数据类型图像作为化身。我想将用户的化身加载到图像控件中,但我无法使其工作。我已尝试过此代码,但没有任何运气:

public void GetUserAvatar()
    {
        string username = Convert.ToString(Session["username"]);

        var image = from u in dc.Users
                    where u.username == username
                    select u.image;
        imgAvatar.Controls.Add(image);
    }
我想我可能需要将图像保存到一个文件夹中,然后将文件路径保存到数据库中。这似乎更容易和顺利。有什么想法吗

最后,我将图像保存到一个文件夹中,然后保存到数据库的路径。我现在上传图像的代码如下所示:

public void addImage()
    {
        if (fuAvatar.PostedFile.ContentType.ToLower().StartsWith
            ("image") && fuAvatar.HasFile)
        {
            string saveLocation = Server.MapPath("savedAvatars/");
            string fileExtension = System.IO.Path.GetExtension(fuAvatar.FileName);
            string fileName = Convert.ToString(Session["userid"]);
            string savePath = saveLocation + fileName + fileExtension;
            fuAvatar.SaveAs(savePath);

            string imageDBPath = fileName + fileExtension;

            LinqClass1DataContext dc = new LinqClass1DataContext();
            int userid = Convert.ToInt32(Session["userid"]);
            var tblUser = (from u in dc.Users
                           where u.userid == userid
                           select u).First();
            tblUser.imagePath = @"\savedAvatars\"+imageDBPath;
            dc.SubmitChanges();
            lblResult.Text = "Avatar lastet opp!";
        }
        else lblResult.Text = "Avatar ikke lastet opp!";
    }
img.ImageUrl = "Handler.ashx;
并加载图片:

public void GetUserAvatar()
   {
       int userid = Convert.ToInt32(Session["userid"]);

       var varPath = dc.Users.Single(u => (u.userid == userid)).imagePath;

       string imagePath = Convert.ToString(varPath);
       imgAvatar.ImageUrl = imagePath;
   }

您应该添加一个通用处理程序文件(.ashx),并在其中写入如下内容:

string sql = "select image from table1";
SqlCommand command = new SqlCommand(sql, con);
SqlDataReader dReader = command.ExecuteReader();
dReader.Read();
context.Response.BinaryWrite((byte[])dReader["Source"]);
dReader.Close();
然后在页面中执行以下操作:

public void addImage()
    {
        if (fuAvatar.PostedFile.ContentType.ToLower().StartsWith
            ("image") && fuAvatar.HasFile)
        {
            string saveLocation = Server.MapPath("savedAvatars/");
            string fileExtension = System.IO.Path.GetExtension(fuAvatar.FileName);
            string fileName = Convert.ToString(Session["userid"]);
            string savePath = saveLocation + fileName + fileExtension;
            fuAvatar.SaveAs(savePath);

            string imageDBPath = fileName + fileExtension;

            LinqClass1DataContext dc = new LinqClass1DataContext();
            int userid = Convert.ToInt32(Session["userid"]);
            var tblUser = (from u in dc.Users
                           where u.userid == userid
                           select u).First();
            tblUser.imagePath = @"\savedAvatars\"+imageDBPath;
            dc.SubmitChanges();
            lblResult.Text = "Avatar lastet opp!";
        }
        else lblResult.Text = "Avatar ikke lastet opp!";
    }
img.ImageUrl = "Handler.ashx;

读这篇文章,首先我发现。基本上,您需要创建一个用原始图像响应的处理程序

请在下面的链接中找到答案

您必须创建一个处理程序来加载图像,并且您可以将源代码传递给图像
标记。

您为什么要将实际图像存储在数据库中?当然,存储文件路径会更好?我必须在这个文件中创建一个新方法吗?或者我可以只使用public void ProcessRequest(HttpContext上下文)?您不需要创建一个新方法,实际上您应该使用ProcessRequest方法:)更多信息可以在这里找到: