【问题标题】:Why don't SQL stored procedures parse image path strings?为什么 SQL 存储过程不解析图像路径字符串?
【发布时间】:2015-01-20 23:27:56
【问题描述】:

我正在为Doodle Creatures 创建一个作弊/粉丝页面。我已经让页面工作了,但我使用的是内联 SQL 而不是存储过程。我尝试将我的 Select 语句设置为存储过程,但图像信息没有得到正确解析。

这是我使用存储过程的 SQL 数据源:

<asp:SqlDataSource ID="SQL_CreatureCombos" runat="server" 
     ConnectionString='<%$ ConnectionStrings:KJAI_DBConnectionString %>' 
     SelectCommand="SelectCreatureCombos"
     SelectCommandType="StoredProcedure">
</asp:SqlDataSource>

这是我现在的 aspx 页面:

<asp:SqlDataSource ID="SQL_CreatureCombos" runat="server" 
     ConnectionString='<%$ ConnectionStrings:KJAI_DBConnectionString %>' 
     SelectCommand="SELECT [Animal1].[AnimalImage] AS AnimalImage1, [Animal2].[AnimalImage] AS AnimalImage2, [Animal1].[AnimalImageAltText] AS AltText1, [Animal2].[AnimalImageAltText] AS AltText2, [Animal1].[AnimalImageToolTip] AS ToolTip1, [Animal2].[AnimalImageToolTip] AS ToolTip2, 
    [Genes].[GeneImg], [Genes].[GeneAltText], [Genes].[GeneToolTip] FROM [CreatureCombos]
INNER JOIN [Animals] AS Animal1 
       ON [CreatureCombos].[NewCreatureID] = Animal1.[AnimalId]
    INNER JOIN [Animals] AS Animal2 
       ON [CreatureCombos].[ComboAnimalID] = Animal2 .[AnimalId]
INNER JOIN [Genes] ON [CreatureCombos].[ComboGeneID] = [Genes].[GeneId]
    ORDER BY AltText2;">
</asp:SqlDataSource>
<asp:DataList ID="DL_CreatureCombos" runat="server" 
     EnableViewState="false" DataSourceID="SQL_CreatureCombos" 
     RepeatColumns="6" RepeatDirection="Horizontal">
    <ItemTemplate>
        <asp:Image ID="IMG_ComboAnimal" runat="server" 
             ImageUrl='<%# Bind("AnimalImage2")%>' 
             AlternateText='<%# Bind("AltText2")%>' 
             ToolTip='<%# Bind("ToolTip2")%>' Width="25%" />+
        <asp:Image ID="IMG_ComboGene" runat="server" 
             ImageUrl='<%# Bind("GeneImg")%>' 
             AlternateText='<%# Bind("GeneAltText")%>' 
             ToolTip='<%# Bind("GeneToolTip")%>' Width="25%" />=
        <asp:Image ID="IMG_NewAnimal" runat="server" 
             ImageUrl='<%# Bind("AnimalImage1")%>' 
             AlternateText='<%# Bind("AltText1")%>' 
             ToolTip='<%# Bind("ToolTip1")%>' Width="25%" />
      </ItemTemplate>
</asp:DataList>

这是我的 Animals 和 CreatureCombos 表:

CREATE TABLE [dbo].[Animals] 
(
    [AnimalId]           INT           IDENTITY (1, 1) NOT NULL,
    [Animal]             VARCHAR (30)  NOT NULL,
    [GroupID]            INT           NOT NULL,
    [AnimalImage]        VARCHAR (MAX) NOT NULL,
    [AnimalImageAltText] VARCHAR (50)  NULL,
    [AnimalImageToolTip] VARCHAR (50)  NULL,

    PRIMARY KEY CLUSTERED ([AnimalId] ASC),
    FOREIGN KEY ([GroupID]) REFERENCES [dbo].[Groups] ([GroupId])
);

我使用VARCHAR(MAX) 是因为我在某处读到微软将在不久的将来摆脱Image 数据类型。我想确保在新的 SQL Server 版本发布时我的数据不会被更改..

CREATE TABLE [dbo].[CreatureCombos] 
(
    [CreatureId]    INT IDENTITY (1, 1) NOT NULL,
    [NewCreatureID] INT NOT NULL,
    [ComboAnimalID] INT NOT NULL,
    [ComboGeneID]   INT NOT NULL,

    PRIMARY KEY CLUSTERED ([CreatureId] ASC),
    FOREIGN KEY ([ComboGeneID]) REFERENCES [dbo].[Genes] ([GeneId]),
    FOREIGN KEY ([ComboAnimalID]) REFERENCES [dbo].[Animals] ([AnimalId]),
    FOREIGN KEY ([NewCreatureID]) REFERENCES [dbo].[Animals] ([AnimalId])
);

任何帮助将不胜感激!我不敢相信它不再起作用了!! :-(

编辑:我修复了内部 SQL 的问题;我不应该刷新我的数据列表。它用标签替换了我的图像控件。

【问题讨论】:

  • 您是否将图像数据存储在 AnimalImage 中并将该数据显示回浏览器?您能否也发布 ASPX 页面
  • AnimalImage 中究竟存储了什么?您的网络服务器上图像的路径?是的,我们确实需要了解您如何将数据源绑定到页面控件。
  • AnimalImage 存储图像的位置。例如,我的 Rhino 记录的图像将是 ~/Images/Doodle Creatures/Animals/Big Animals/Rhino.png
  • "图像信息没有被正确解析"。这什么也没告诉我们。图片信息到底是什么,怎么解析不正确?
  • 是的,Image 已被弃用 - 但它应该被“替换”为 VARBINARY(MAX)(一个 binary 数据类型) - 而不是 VARCHAR(MAX)(一个 string 数据类型)

标签: asp.net sql-server stored-procedures


【解决方案1】:

我错了;我将我所有的内联 SQL 放入存储过程中,页面运行良好!我认为当我第一次封装我的 SQL 代码并调用其存储过程时,我的数据列表会自行刷新并在应该有图像的位置创建标签。我的错。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    相关资源
    最近更新 更多