Bonjour,
J'ai une procédure stockée qui s'écrit comme cela :
Si j'exécute
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 create procedure sel_toto() as begin if (test_not_good) return -1 select col1, col2 from MyTable where MyTable.OID = @OID return 0 endSi je ne suis pas dans le cas où test_not_good est validé, j'obtiens bien un resultset avec col1 et col2, puis j'ai bien @ret qui vaut 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 declare @ret int select @ret = 999 exec @ret = sel_toto select @ret
Quand je drag&drop cette proc dans mon fichier .dbml, cela génère le code suivant:
Si je regarde ce que fait ReturnValue, http://msdn.microsoft.com/en-us/libr...vs.100%29.aspx me dit "Gets the return value or result of the executed query". Et tout est dans le OR. Vu ce qu'il crée, il ne pourra jamais stockée a priori la variable du return. Pourquoi est-ce qu'il n'y a pas une variable pour le code retourné par le return et une autre pour le resulset, ça me paraît aberrant. Ca veut dire que le jour où test_not_good est validé, mon appli plante en l'état actuel des choses.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.sel_toto")] public ISingleResult<sel_totoResult> sel_toto() { IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod()))); return ((ISingleResult<sel_totoResult>)(result.ReturnValue)); } public partial class sel_totoResult { private int _col1; private string _col2 public sel_totoResult() { } [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_col1", DbType="Int NOT NULL")] public int col1 { get { return this._col1; } set { if ((this._col1 != value)) { this._col1 = value; } } } [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_col2", DbType="NVarChar(12)")] public string col2 { get { return this._col2; } set { if ((this._col2 != value)) { this._col2 = value; } } } }
Est-ce qu'il existe un moyen autre que de ne pas faire de return dans la proc et passer la valeur du return dans un champs output ?
J'imagine que je ne peux pas non plus modifier le code designer du fichier .dbml pour gérer moi-même les 2 cas possible (un return != 0 ou un resultset) car cela va se faire écraser à la moindre modif de ce dernier.
Partager