SQL Oracle - 'System.InvalidCastException'
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:
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();
} |