Bonjour tout le monde
J'essaye de mettre en place LINQ au boulot où toutes nos bases sont sous SYBASE.
J'ai commencé par un ptit code tout simple:
Ma classe
Mon DataContext:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 [Table(Name="VC_EMTN_T")] public class EMTN { [Column(IsPrimaryKey = true)] public string isin { get; set; } [Column] public DateTime maturity { get; set; } [Column] public string currency { get; set; } }
Mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class DemoContext : DataContext { public Table<EMTN> EMTNs; public DemoContext(DbConnection cnx) : base(cnx) { } }
ObjectDumper est un ptit utilitaire MS pour écrire dans la console directement le résultat de la query.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DemoContext db = new DemoContext(cnx); db.Log = Console.Out; var query = db.EMTNs; ObjectDumper.Write(query); Console.ReadLine();
Ici, aucun problème, je récupère bien ce que je veux.
Maintenant, j'essaye de filtrer:
Et là, ça me pète une exception: Must declare variable '@p0'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 DemoContext db = new DemoContext(cnx); db.Log = Console.Out; var query = from e in db.EMTNs where e.isin.StartsWith("FR") orderby e.isin ascending select new { e.isin, e.currency }; ObjectDumper.Write(query); Console.ReadLine();
J'ai bien compris que LINQ fonctionne avec des requêtes paramétrées et que p0 correspond au critère e.isin.StartsWith("FR"). ET là je me dis, il a pas déclaré le paramètre au moment d'exécuter la requête.
En affichant le log de LINQ, voilà ce que j'obtiens:
Sur la dernière ligne, on voit qu'il se croit dans un context SQL Server 2005. Le problème vient certainement de là.
Pourtant, quand je crée mon DataContext, l'object DbConnection que je lui passe "précise" bien qu'il tape une base SYBASE:
Et mon fichier de config:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 private static DbProviderFactory dbFactory { get { return DbProviderFactories.GetFactory(css.ProviderName); } } private static ConnectionStringSettings css { get { return ConfigurationManager.ConnectionStrings["ESpread"]; } } private static DbConnection _cnx; private static DbConnection cnx { get { if (_cnx == null) { _cnx = dbFactory.CreateConnection(); _cnx.ConnectionString = css.ConnectionString; } return _cnx; } }
Je pense que je m'y prends mal lors de la création du DataContext mais je vois pas comment faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <connectionStrings> <add name="ESpread" connectionString="DRIVER={Sybase System 11};SRVR=SYBREC_ESPREAD;UID=***;PWD=***;SelectMethod=1;" providerName="System.Data.Odbc"/> </connectionStrings>
Une idée?
Merci
Partager