Bonjour à tous,

Un petite question j'ai un problème sur une requête SQL Oracle, je veux récupérer 3 champs de ma BDD la requete marche parfaite dans Toad ou autre et me renvoie bien les valeurs des 3 champs du select.
Lorsque j'utilise la requete dans le code c# je récupère l'erreur suivante car la variable du dr.GetString(2) est = null alors qu'il y a bien une data dans la BDD sur ce champ ...

voici le détail de l'erreur.

L'exception System.InvalidCastException n'a pas été gérée
HResult=-2147467262
Message=Le cast spécifié n'est pas valide.
Source=Oracle.DataAccess
StackTrace:
à Oracle.DataAccess.Client.OracleDataReader.GetString(Int32 i)
à TherAcc.Form1.getInfoPat() dans c:\Users\j.mondout\Documents\Visual Studio 2013\Projects\TherAcc\TherAcc\Form1.cs:ligne 109
à TherAcc.Form1.button1_Click(Object sender, EventArgs e) dans c:\Users\j.mondout\Documents\Visual Studio 2013\Projects\TherAcc\TherAcc\Form1.cs:ligne 44
à System.Windows.Forms.Control.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
à System.Windows.Forms.Control.WndProc(Message& m)
à System.Windows.Forms.ButtonBase.WndProc(Message& m)
à System.Windows.Forms.Button.WndProc(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
à System.Windows.Forms.Application.Run(Form mainForm)
à TherAcc.Program.Main() dans c:\Users\j.mondout\Documents\Visual Studio 2013\Projects\TherAcc\TherAcc\Program.cs:ligne 19
à System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
à System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
à System.Threading.ThreadHelper.ThreadStart()
InnerException:

j'ai fait le test en récupérant les data dans un datagrid pas de problème j'ai la data....

je suis un peu perdu si quelqu'un à une idée.

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
 OracleConnection OCon = new OracleConnection(oradb);
            OCon.Open();
            OracleCommand cmd = new OracleCommand();
            cmd.Connection = OCon;
            cmd.CommandText = "select NOMPAT,PNOPAT,DATNAI from patien where NUMDOS = '" + numdos + "' ";      //      
            cmd.CommandType = CommandType.Text;
            OracleDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                Console.Write(dr.GetString(0));
                Console.Write(dr.GetString(1));
                //Console.Write(dr.GetString(2));
                string nomPat = dr.GetString(0);
                string pNomPAt = dr.GetString(1);
                //string dateNaissPat = dr.GetString(2);
                lbl_nomPat.Text =  dr.GetString(0);
                lbl_pNomPat.Text = dr.GetString(1);
                lbl_dateNaiss.Text = dr.GetString(2);
            }
            OCon.Close();
        }