如何从数据库获取名称与图片(图片存于上传文件夹,库存引用)?代码求助
问题分析与修复方案
嘿,我注意到你的需求是从数据库获取图片的引用路径(实际图片存在上传文件夹里),但当前代码是把数据库返回值当作二进制图片数据处理,这和你的存储逻辑不匹配,这就是你没得到预期结果的核心原因。
你代码里的几个问题
- 类型转换错误:数据库存的是字符串路径,但你用
(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
相关产品推荐
相关产品推荐

