You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从数据库获取名称与图片(图片存于上传文件夹,库存引用)?代码求助

问题分析与修复方案

嘿,我注意到你的需求是从数据库获取图片的引用路径(实际图片存在上传文件夹里),但当前代码是把数据库返回值当作二进制图片数据处理,这和你的存储逻辑不匹配,这就是你没得到预期结果的核心原因。

你代码里的几个问题

  • 类型转换错误:数据库存的是字符串路径,但你用(byte[])cmd.ExecuteScalar()强制转成字节数组,这会直接抛出类型转换异常
  • 字符串拼接语法错误:"data:image/png;base64, +strBase64" 这里的引号位置错了,正确写法是 "data:image/png;base64," + strBase64(不过这个问题在修正存储逻辑后就不需要了)
  • 大小写不一致:C#是大小写敏感的,Convert.ToBase64String(bytes) 里的bytes应该是你定义的Bytes变量

修正后的代码实现

假设你的存储过程spUploadImage返回的是图片的相对路径(比如~/Uploads/avatar.png),下面是调整后的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;

namespace Admin
{
    public partial class fetch : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // 先检查QueryString里的Id参数是否存在
            if (!string.IsNullOrEmpty(Request.QueryString["Id"]))
            {
                string cs = ConfigurationManager.ConnectionStrings["DBSC"].ConnectionString;
                using (SqlConnection con = new SqlConnection(cs))
                {
                    SqlCommand cmd = new SqlCommand("spUploadImage", con);
                    cmd.CommandType = CommandType.StoredProcedure;
                    
                    SqlParameter ParamId = new SqlParameter()
                    {
                        ParameterName = "@Id",
                        Value = Request.QueryString["Id"]
                    };
                    cmd.Parameters.Add(ParamId);
                    
                    con.Open();
                    // 数据库存的是路径字符串,直接获取即可
                    string imagePath = cmd.ExecuteScalar()?.ToString();
                    
                    if (!string.IsNullOrEmpty(imagePath))
                    {
                        // 用ResolveUrl确保路径是服务器可识别的相对路径
                        FileUpload1.ImageUrl = ResolveUrl(imagePath);
                    }
                    else
                    {
                        // 没有获取到路径时,设置一张默认图片兜底
                        FileUpload1.ImageUrl = ResolveUrl("~/Images/default-image.png");
                    }
                }
            }
            else
            {
                // 没有传入Id参数时的处理
                FileUpload1.ImageUrl = ResolveUrl("~/Images/default-image.png");
            }
        }
    }
}

额外要注意的点

  • 确保你的上传文件夹(比如Uploads)给IIS进程分配了读取权限,否则图片会加载失败
  • 确认存储过程spUploadImage返回的路径是正确的:如果存的是相对路径,要和网站根目录对应;如果是绝对路径,建议转成相对路径(更利于部署)
  • 如果需要同时获取名称和图片路径,可以修改存储过程返回多个值,用ExecuteReader()或者输出参数来获取

内容的提问来源于stack exchange,提问作者Anuj Todankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:39:07