ASP.NET 3.5 avec SQL SERVER : Problème LIKE

Fermé
Thia - 4 févr. 2008 à 17:33
 nairik - 10 juin 2010 à 09:54
Bonjour,
je suis en train de faire un site en ASP.NET 3.5. J'utilise une base de données SQL Server 2005. À un certain endroit, je dois permettre aux utilisateurs de faire des recherches selon les champs contenus dans un résultat de plusieurs tables grâce à un LinqDatasource.
L'un des modes de recherche qu'ils peuvent faire est du genre "TelChamp Contient ceciEstUneChaîne".
Je veux donc modifier l'énoncé SQL qui se cache derrière le LinqDataSource (en utilisant la propriété Where). Ça a marché (pas pour un contient, mais pour un exact) avec une chaîne contenant un entier. Voici la modification que je fais à la propriété Where du LinqDataSource pour l'instant : (Pour un champ texte commençant par a)

LinqDataSource1.Where = "table.champ1 LIKE 'a%'";

Mais malgré tout ce que j'essaie (mettre des / devant les ' pour être sûre qu'ils resteront là au moment de l'envoyer à la base de données), je me retrouve avec cette erreur lors de l'éxécution :

Expression of type 'Boolean' expected
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.Query.Dynamic.ParseException: Expression of type 'Boolean' expected

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[ParseException: Expression of type 'Boolean' expected]
System.Web.Query.Dynamic.ExpressionParser.Parse(Type resultType) +297
System.Web.Query.Dynamic.DynamicQueryable.Where(IQueryable source, String predicate, Object[] values) +131
System.Web.UI.WebControls.DynamicQueryableWrapper.Where(IQueryable source, String predicate, Object[] values) +15
System.Web.UI.WebControls.LinqDataSourceView.ExecuteSelectExpressions(IQueryable source, IDictionary`2 whereValues, IOrderedDictionary orderByOrderedValues, IDictionary`2 groupByValues, IDictionary`2 orderGroupsByValues, IDictionary`2 selectNewValues) +254
System.Web.UI.WebControls.LinqDataSourceView.ExecuteSelectQuery(LinqDataSourceSelectEventArgs selectEventArgs, Object selectResult, Object table, Boolean storeOriginalValues) +312
System.Web.UI.WebControls.LinqDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +487
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +17
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +149
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +70
System.Web.UI.WebControls.GridView.DataBind() +4
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
System.Web.UI.WebControls.GridView.OnPreRender(EventArgs e) +24
System.Web.UI.Control.PreRenderRecursiveInternal() +86
System.Web.UI.Control.PreRenderRecursiveInternal() +170
System.Web.UI.Control.PreRenderRecursiveInternal() +170
System.Web.UI.Control.PreRenderRecursiveInternal() +170
System.Web.UI.Control.PreRenderRecursiveInternal() +170
System.Web.UI.Control.PreRenderRecursiveInternal() +170
System.Web.UI.Control.PreRenderRecursiveInternal() +170
System.Web.UI.Control.PreRenderRecursiveInternal() +170
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2041

Et voilà... Je n'arrive pas à trouver la solution quelque part donc si quelqu'un a une idée ou une piste... Ça serait très gentil :-)
A voir également:

2 réponses

Je vais me répondre moi-même finalement. Le LIKE ne marche pas dans un linqdatasource.Where, mais on a accès à des fonctions comme contains, startswith et endswith pour chercher des correspondances.
0
<asp:LinqDataSource ID="x_oLinqRegistry" runat="server" ContextTypeName="WhoisDataContext"
EnableInsert="True" EnableUpdate="True" TableName="T_Registries"
Where="lab_WhoisServer.Contains(@lab_WhoisServer) || lab_Provider.Contains(@lab_WhoisServer)"
EnableViewState="true" StoreOriginalValuesInViewState="true">
<WhereParameters>
<asp:ControlParameter ControlID="x_txtWhoisServer" Name="lab_WhoisServer" PropertyName="Text"
Type="String" ConvertEmptyStringToNull="False" />
</WhereParameters>
</asp:LinqDataSource>
0