2011-10-04 62 views
1

我想使这个ASP/SQL语句工作,但我不断得到ORA-01036:非法字符错误。所以,我假设我缺少SQL语法的转义字符或者这些行中的某个字符。非法字符错误为ASP.NET/Oracle

我将这段代码从我的C#代码转换而来,并将其编码为ASP。

<asp:SqlDataSource ID="EmployeeSqlDataSource" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
     ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
     OnSelecting="EmployeeSqlDataSource_Selecting" 
     SelectCommand="SELECT a.vax_user_id, b.person_id, b.email_id, b.last_nm, b.first_nm, b.parent_org_unit_cd, a.acceptance_date, a.emp_status_cd 
     FROM inet_own.fitness_rwl a, inet_own.employee_info_ldap_snap b 
     WHERE a.vax_user_id = b.vax_user_id 
     AND a.emp_status_cd like 'A' 
     AND UPPER(b.last_nm) LIKE UPPER('%:lastName%') 
     ORDER BY b.parent_org_unit_cd, a.acceptance_date 
     "> 

    <SelectParameters> 
     <asp:ControlParameter ControlID="radTbLastName" Name="lastName" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

回答

1

:lastName意思是一个绑定变量?我不知道ASP,但perl或java或C(oci)都不会那样。这些语言不允许字符串(引号)内绑定变量,相反,你必须把它写成

AND UPPER(b.last_nm) LIKE UPPER('%' || :lastName || '%') 

可惜我看不出这可能会导致无效字符错误,但也许它的混乱ASP等等实际上被传递给oracle的东西被搞砸了。只是一个猜测。

+0

它应该是。 SelectParameters链接到一个Telerik文本框,该文本框捕获用户的文本/名称,然后将其用作一个变量,以将SQL语句内的lastName替换为文本框的文本值。 – ReiRei

+0

惊讶于您的建议确实有效。我有C#代码背后,它不喜欢之前的%,所以我不得不做一个字符串变量添加%与用户输入,然后传递该变量。 – ReiRei