用一字段存储图片信息和文字信息的处理

来源:互联网 发布:天猫魔盒设置网络 编辑:程序博客网 时间:2024/04/28 04:07

前几天做个公司的宣传网站,学习了前辈们的经验把数据库设计成这样:

商品:
(access数据库)
一基本表:
商品共有的属性及值;

一扩展属性名称表(也可以理解为属性名称表):
含ID和名称两字段;

一扩展属性表:
ID/属性ID/产品ID/属性值.
属性值勤中有存图片和文字类的信息.
图片只存文件名.

但取出时要输出 <img> 把图片显示出来;
而一般文字不需要这样处理.
所以要在取出时先判断,再分别处理.

这个问题我已经自己写了一个控件作了处理.
我把代码贴出来,大家交流一下,也希望能有更好的方法处理这类问题. 

using System;
using System.Data;
using System.Web.UI;
using System.ComponentModel;
using Model;
using BLL;

namespace WareImgOutput
{
    
/// <summary>
    
/// WaresImg 的摘要说明 输出商品的简要信息,包括一张缩略图
    
/// </summary>


    [DefaultProperty(
"SelectedId")]
    [ToolboxData(
"<{0}:RenderControl runat=server></{0}:RenderControl>")]

    
public class WaresImg : Control
    
{
        
public WaresImg()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
// 实现 SelectedId
        [Bindable(true)]
        [Category(
"Appearance")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string SelectedId
        
{
            
get
            
{
                String s 
= (String)ViewState["SelectedId"];
                
return ((s == null? String.Empty : s);
            }

            
set
            
{
                ViewState[
"SelectedId"= value;
            }

        }

        
// 重写Render方法
        protected override void Render(HtmlTextWriter writer)
        
{
            DataTable dt 
= null;
            
if (SelectedId != null && SelectedId != "")
            
{
                
int _id = Convert.ToInt32(SelectedId);
                dt 
= PropertyManager.Instance().GetAllPropertyByID(_id);
                
if (dt != null && dt.Rows.Count > 0)
                
{
                    
foreach (DataRow dr in dt.Rows)
                    
{
                        
//只输出缩略图片
                        if (dr["ex_propertyName"].ToString() == "图片")
                        
{
                            writer.AddAttribute(
"src""images/" + "s_" + Uri.UnescapeDataString(dr["property_value"].ToString()));
                            writer.AddAttribute(
"alt", Uri.UnescapeDataString(dr["ware_name"].ToString()));
                            writer.RenderBeginTag(HtmlTextWriterTag.Img);
                            writer.RenderEndTag();
                            
break;//只输出一张图片
                        }
                        
                    }

                }

                
else
                
{
                    writer.Write(
"商品没有属性.");
                }

            }

            
else
            
{
                writer.Write(
"没有选择商品.");
            }

        }

    }

}

这样做,目的是让管理者可以无限制的添加商品的属性,包括多张图片.

但有一个不好的就是损失了性能.