如何检查数据库中已存在的图像,其中的对象来自两个不同的SQL表?

时间:2016-01-13 14:25:49

标签: html sql-server asp-classic

我正在做这个项目(经典的asp和SQL),其中我有一个输入框,点击“更新”按钮后从该输入框中取出图像名称。单击更新按钮后,可用/预先存在的图像将显示或显示在表格中。在存储此图像名称之前,我必须检查此图像是否已存在于数据库中。如果已有图像,我应该给出一条错误消息“此图像已存在于数据库中”。我遇到的问题是,我不明白如何检查不同形式的两个对象。换句话说,我的输入框采用的形式是执行一个SQL表,而表单元格中显示的记录集来自另一个数据库表。

    <% 
            Response.Write "<form name=updateinfo action=images.asp?id="& Request.QueryString("ID") &" method='post'>"
            Response.Write "<input type=hidden name=update value=actionaddimage>"
            Response.Write "<input type=hidden name=id value="& Request.QueryString("id")&">"
         %>  
    <tr> 
        <td align="center" bgcolor=#E0EAFD colspan=2>
            <input type="text" name="image" value="<%=objRS("image")%>">
            <input type="submit" name="submit" value="UPDATE"><br /><br />
        </td>
    </tr>
</form>
<!--div for displaying images-->                
<div> 
    <table cellpadding=3 cellspacing=0 border=0 width="100%">
        <tr>
            <td>
                <div style="text-align:left">
                <% 
                    DIM Sql1, Rs1,Cnt1
                        Cnt1=1
                    Sql1 ="SELECT TOP (10) np.imgId, p.name, p.productID, p.pack1, p.brand, p.image, np.imgName,np.imgThumbName, np.imageTitle, p.discontinue_YN, pf.flavor FROM product p "&_
                               "INNER JOIN NewProductImage np "&_
                               "ON np.productId = p.productID "&_
                               "LEFT OUTER JOIN product_flavors pf "&_
                               "ON p.flavor = pf.id "&_
                               "WHERE np.productID='"&request.QueryString("id")&"' "&_
                               "ORDER BY productID"
                    SET Rs1 = objConn.Execute(Sql1)

                    IF NOT Rs1.EOF=true THEN 
                    %>  
                    <% 
                        IF objRS("image") = Rs1("imgName") THEN
                            Response.Write "<div id= 'errormsg'>**This image is already in database.</div>"
                            Response.Write "<br />"
                        END IF  
                        %>  
                        <span>More Views:</span>
                    <% END IF %>
                </div>
            </td>
        </tr>
        <tr>
            <td>
                <div>
                    <%
                    IF NOT Rs1.EOF=true THEN 
                    %>
                    <center>
                    <%
                        Response.Write "<table><tr><td>Image Big</td><td>Image Small</td></tr>"
                         WHILE NOT Rs1.EOF
                        %>
                        <%
                            'Response.Write "<td class='tdcell'>"& Rs1("productID") &"</td>"
                            Response.Write "<tr><td><a href='abc.asp?id=" & Rs1("productID") & "'><img src='http://www.example.com/images/products/1400/"& Rs1("imgName") &"'></a></td>"
                            Response.Write "<td><a href='abc.asp?id=" & Rs1("productID") & "'><img src='http://www.example.com/images/products/250/"& Rs1("imgName") &"'></a></td>"
                            Response.Write "</tr>"
                            %>
                        <%
                            Rs1.moveNext
                        WEND
                            Response.Write "</table><br />"
                            %>
                    </center>
                    <%
                    END IF  
                        Rs1.close
                        SET Rs1= nothing
                    %>
                </div>  
</div>

因此,输入框的值,即value =“&lt;%= objRS(”image“)%&gt;”,它来自产品表,它位于表单内。另一个表是newProductImage,用于显示表中的图像。我尝试做“加入”并按上图所示进行检查:

IF objRS("image") = Rs1("imgName") THEN
                        Response.Write "<div id= 'errormsg'>**This image is already in database.</div>"
                        Response.Write "<br />"
                    END IF

但逻辑不起作用。我也尝试过做

IF Rs1("p.image") = Rs1("np.imgName") THEN
                    Response.Write "<div id= 'errormsg'>**This image is already in CDN.</div>"
                    Response.Write "<br />"
                END IF  

它给我一个错误“在对应于所请求的名称或序号的集合中找不到项目”。能帮我解决一下如何检查?

1 个答案:

答案 0 :(得分:0)

我会发表评论但硬币不够。

尝试使用NOT EXISTS或EXISTS而不是JOIN来编写它。 前几天我不得不重写一些与你正在做的相似的代码。我最终选择了WHERE NOT EXISTS,但也选择了WHERE EXISTS

这是我的资源链接MSDN Exists (Transact-SQL)

这将为您提供另一个代码选项。

更新于1-13-2016 3:30 PM CST

此处的计划是发现PRODUCT P.IMAGE是否与NEWPRODUCTIMAGE NP.IMGNAME匹配。

如果我们有比赛..

IF RS.EOF=False Then 

或你是如何写的

IF NOT RS.EOF=True THEN 

如果我记得的话,我们可以跳过额外的匹配,这是不能正常工作的。 WHERE EXISTS会为您检查。

If objRS("image") = RS("ImgName") 

如果您需要调用图像,您知道它在那里,因为它不是虚假的返回。

str = RS(“image”)

Sql ="SELECT product.name, product.productID, product.brand, product.image "&_
     " FROM product "&_
         " WHERE EXISTS "&_
         "("&_
         " SELECT 1 "&_
         " FROM NewProductImage "&_
         " WHERE LOWER(NewProductImage.imgName) = LOWER(product.image) "&_
         " AND LOWER(NewProductImage.imgName) = "&LCase(str)&" "&_
         ")"&_
     " AND product.name Is Not NULL "

        SET RS = objConn.Execute(Sql)   

        If RS.EOF=False THEN 

                Response.Write "<div>This image is already in db.</div>" 
        End If

        Set RS = Nothing

WHERE LOWER(imgName)= LOWER(图像)收集匹配的图像。 AND LOWER(imgName)=“&amp; LCase(str)&amp;”告诉我们您正在测试或查看两个表中的图像。

在使用“&amp; str&amp;”的示例中你应该只在一个地方需要它。

我添加了一个AND语句,因此您可以看到更多的格式。 更新以匹配小写。