Search code examples
c#sqlconnection

Connecting with the database using C#


I'm trying to get data from a Database and all time I get the next error:

No se controló System.NullReferenceException HResult=-2147467261
Message=Referencia a objeto no establecida como instancia de un objeto. Source=ImeApps StackTrace: en ComunCD.getConexionIRATI() en C:\Desarrollo\VisualStudio2010\ImeApps\ImeApps\ComunCD.cs:línea 64 en EmpresasCD.getEmpresas() en C:\Desarrollo\VisualStudio2010\ImeApps\ImeApps\EmpresasCD.cs:línea 41 en ImeApps.Principal.abrirSeleccionEmpresaEspera() en C:\Desarrollo\VisualStudio2010\ImeApps\ImeApps\Principal.cs:línea 92 en ImeApps.Principal.abrirSeleccionEmpresa() en C:\Desarrollo\VisualStudio2010\ImeApps\ImeApps\Principal.cs:línea 82 en ImeApps.Principal.menuItem4_Click(Object sender, EventArgs e) en C:\Desarrollo\VisualStudio2010\ImeApps\ImeApps\Principal.cs:línea 77 en System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e) en System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e) en System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e) en System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e) en System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met) en System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met) en System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea) en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) en System.Windows.Forms.Control.WndProc(Message& m) en System.Windows.Forms.ScrollableControl.WndProc(Message& m) en System.Windows.Forms.ToolStrip.WndProc(Message& m) en System.Windows.Forms.MenuStrip.WndProc(Message& m) en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) en System.Windows.Forms.Application.Run(Form mainForm) en ImeApps.Program.Main() en C:\Desarrollo\VisualStudio2010\ImeApps\ImeApps\Program.cs:línea 16 en System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) en System.AppDomain.nExecuteAssembly(RuntimeAssembly assembly, String[] args) en System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel) en System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly() en System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData) en System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext) en System.Activator.CreateInstance(ActivationContext activationContext) en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() en System.Threading.ThreadHelper.ThreadStart_Context(Object state) en System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) en System.Threading.ThreadHelper.ThreadStart() InnerException:

What I am doing is the following:

public class ComunCD
    {
    private static SqlConnection _sqlConnectionIRATI;

    public static void conectarBDIRATI()
        {
            _sqlConnectionIRATI = new SqlConnection(ConfigurationSettings.AppSettings["CONEXION_IRATI"].ToString());
            _sqlConnectionIRATI.Open();
        }

    public static SqlConnection getConexionIRATI()
    {
        if (_sqlConnectionIRATI == null)
        {
            //conectarBDIRATI();
        }
        if (_sqlConnectionIRATI.State != ConnectionState.Open) // HERE I GET THE ERROR
        {
            _sqlConnectionIRATI.Open();
        }
        return _sqlConnectionIRATI;
    }

What could am I doing wrong? Thanks in advance!


Solution

  • If _sqlConnectionIRATI is null you should not test for State: add else:

        if (_sqlConnectionIRATI == null)
        {
            //conectarBDIRATI();
        }
        else if (_sqlConnectionIRATI.State != ConnectionState.Open) 
        {
            _sqlConnectionIRATI.Open();
        }
    

    Or you should create an instance:

        // If _sqlConnectionIRATI is null, we create it 
        if (_sqlConnectionIRATI == null)
          conectarBDIRATI();
    
        // _sqlConnectionIRATI is guaranteed to be not null: 
        if (_sqlConnectionIRATI.State != ConnectionState.Open)  
          _sqlConnectionIRATI.Open();