0

我想从 SQL 获取产品图像列表以显示在图像幻灯片中。

但是,我不确定从 MS SQL 存储过程返回数据的最佳方式。

问题是,使用下面的 SP,我得到了每个图像的重复记录。理想情况下,我想获得一个数组或字符串列表或某种方式来从单个记录中拆分数据。但是,我对其他解决方案持开放态度。我的目标是以直观的方式获取页面上的图像。这是针对 ASP.Net C# 应用程序的。

这是我的存储过程中的简化选择语句:

  SELECT 

  P.[ProductId]
  ,P.[ProductName]
  ,I.[FileName] as ProductImage

  FROM [Product] P
  LEFT JOIN [ProductImages] I
  on P.ProductId = I.ProductId

  Where P.ProductId = @ProductId

这将返回如下所示的数据:

ProductId         ProductName       ProductImage
1                 Coffee Mug        Mug_Image1.jpg
1                 Coffee Mug        Mug_2.jpg
1                 Coffee Mug        Mug_Img3.jpg

我希望它看起来像这样(但我也想听听其他想法):

ProductId         ProductName       ProductImage
1                 Coffee Mug        Mug_Image1.jpg, Mug_2.jpg, Mug_Img3.jpg

同样,我不确定这是否是最好的方法。

我有两张桌子。一个是 Product,另一个是 ProductImages,它具有 Product 表中 ProductId 的 FK。

最终,我需要构建 JSON 来提供客户端幻灯片脚本。像这样:

productimages = [
        { "image": "Mug_Image1.jpg", "caption": "", "link": "", "title": "" },
        { "image": "Mug_2.jpg", "caption": "", "link": "", "title": "" },
        { "image": "Mug_Img3.jpg", "caption": "", "link": "", "title": "" }
                                    ];

这里是 C#

//Create product object to display on page
ProductEntity product = new ProductEntity();
product.Id = idval;
//Load the product from SP based on ID
ProductWF.LoadProduct(product);

//Render product details on page
ProductNameLabel.Text = product.ProductName;

//Construct JSON image list
StringBuilder sb = new StringBuilder();
etc...
4

1 回答 1

1

你可以使用这样的东西:

SELECT
   P.[ProductId],
   P.[ProductName],
   FileNames = STUFF(
               (SELECT ', ' + FileName FROM ProductImages 
                WHERE ProductId = P.ProductId FOR XML PATH('')) , 1 , 1 , '')
      FROM 
        [Product] P

获取每个产品的逗号分隔的文件名列表,如果有帮助的话。但是您想要生成的 JSON 字符串可能会从您已有的查询结果中构建得更简单。

如果您从上面获取查询,您可以将其映射到一个类:

public class Product
{
   public int ProductId {get; set;}
   public string ProductName {get; set;}
   public string FileNames {get; set;}
}

在服务器端,您必须拆分 FileNames 字符串属性并构造一个 json 字符串。

于 2012-05-22T13:41:18.260 回答