2012-02-23 29 views
0

没有where命令结果像这样重复每次产品后重复所有记录类别[OleDbException(0x80040e14):查询表达式'PCName = <%#Eval('PCName')%>'中的语法错误(缺少运算符)。]

新的笔记本电脑宏碁 戴尔 HP 金士顿 索尼 USB闪盘 宏基 戴尔 HP 金士顿 索尼 二手笔记本 宏基 戴尔 HP 金斯顿 索尼

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"></head> 
<body>  
<form id="form1" runat="server"> 
<div> 
    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="AccessDataSource1"> 
    <ItemTemplate> 
    <li><asp:Label ID="Label1" runat="server" Text='<%# Bind("PCName") %>' /></li> 
<asp:AccessDataSource ID="AccessDataSource2" runat="server" DataFile="~/Database/PDetail.mdb" 
SelectCommand="SELECT DISTINCT [PBName] FROM [PDETAIL] WHERE PCName= <%# Eval('PCName')%> " /> 
<asp:Repeater ID="Repeater2" runat="server" DataSourceID="AccessDataSource2"> 
    <ItemTemplate> <li> <%# Eval("PBName")%> </li> </ItemTemplate> 
</asp:Repeater> 
    </ItemTemplate> 
    </asp:Repeater> 

<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/Database/PDetail.mdb" 
    SelectCommand="SELECT DISTINCT [PCName] FROM [PDETAIL]" /> 
</div> 
</form> 

+0

'为工作,但在此之后该错误时在代码,但错误 – user1228468 2012-02-23 15:36:35

回答

0
<ItemTemplate> 

<asp:AccessDataSource ID="AccessDataSource2" 
     runat="server" DataFile="~/Database/PDetail.mdb" 
     SelectCommand='<%# "SELECT DISTINCT [PBName] FROM [PDETAIL] WHERE PCName= " + (char)39 + Eval("PCName") + (char)39 %>' /> 

</ItemTemplate> 


(char)39 is for ' 
+0

已经2中继给出上述我认为的结果<%# Eval(“PCName”)%>存储在SQL查询中使用的字符串var和var并且有一些初始值 – user1228468 2012-02-23 15:54:05

+0

你可以试试这个吗? – 2012-02-23 16:19:09

+0

我希望你的名字中没有撇号......但是我认为你需要尝试另一种方法。在父Repeater调用item.FindControl(“AccessDataSource2”)的ItemDataBound事件上,然后将其转换为适当的控件,并将在item.Data中找到的值添加到SelectParameters中。这样您就不会因为名称中不需要的文字而导致错误,并且您可以创建不受SQL注入影响的安全语句。 – 2012-02-23 16:25:12

相关问题