0

我有一个查询,当我在 sqlDataSource 控件(向导测试按钮)中对其进行测试时,它可以工作,但在我运行页面时它不起作用。我确保 gridview 具有正确的 sqlDataSource 控件作为其源。这真让我抓狂。

这有发生在其他人身上吗?

编辑:

它与where子句中的这一行有关(它是一个oracle数据库)

Where    (upper(AA.Email_Address)=UPPER(:Email_Address) OR :Email_Address IS NULL) AND 
 (upper(AA.Display_Name) Like  UPPER('%' || :Display_Name || '%')   OR :Display_Name IS NULL)

该页面单独使用每个搜索子句,但当它们都存在时不使用(它在 sqlDataSource 向导测试中使用两个参数,但在页面运行时不使用)

==================================================== ====================================

编辑:

感谢您提供看起来更干净的查询建议。

我确实将默认的 CancelSelectOnNullParameter 属性设置为“true”。当我将其更改为 false 时,页面将不会显示。我收到这条消息

“服务器应用程序不可用您尝试在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的“刷新”按钮以重试您的请求。管理员注意:详细说明此特定请求失败原因的错误消息可以在 Web 服务器的应用程序事件日志中找到。请查看此日志条目以找出导致此错误发生的原因。“

=================================

这是除了我运行页面时有效的查询

SELECT * 
FROM a Left Join b on b.institution_code=a.institution_code
WHERE 
      (upper(a.Login_Name)=UPPER('%' || :Login_Name || '%') OR :Login_Name IS NULL)
  AND (upper(a.Display_Name) Like  UPPER('%' || :Display_Name || '%')   OR :Display_Name IS NULL) 
  AND (upper(a.Email_Address)=UPPER(:Email_Address) OR :Email_Address IS NULL) 
  AND ((a.institution_code=:institution_code) OR :institution_code IS NULL)  
  AND (upper(b.institution_desc) Like  UPPER('%' || :institution_desc || '%')   OR :institution_desc IS NULL
4

2 回答 2

0

首先,您最好编写这样的查询以从 where 子句中删除“OR”:

WHERE
        Upper(AA.Email_Address)  =  Upper(COALESCE(:Email_Address,AA.Email_Address))
    AND Upper(AA.Display_Name) LIKE Upper('%' || COALESCE(:Display_Name,AA.Display_Name) || '%')

至于您的具体问题,您可能遇到了CancelSelectOnNullParameter属性。只需将其设置为“假”,你会没事的。

于 2009-08-24T16:49:00.137 回答
0

您是否设置了数据源的正确 ProviderName 属性?

尝试设置

Provider="System.Data.OracleClient"

SqlDataSource 标记中的属性。

于 2009-08-24T16:52:40.610 回答