2009-06-12 6 views
2

Das unten Stück Code, die folgende Ausnahme wirft ..SqlCommand C# Ausgabe

Fehlermeldung:

Objektverweis auf eine Instanz eines Objekts nicht festgelegt. Stack-Trace:
bei System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) bei System.Data.SqlClient.SqlCommand.ExecuteNonQuery()

Ich bin verloren nach dem Grund, warum ..

sqlcon = new SqlConnection(strSqlconnection); 

SqlCommand sqlcomSMCheckin = new SqlCommand("prc_CheckIn", sqlcon); 

sqlcomSMCheckin.CommandType = CommandType.StoredProcedure; 

sqlcomSMCheckin.Parameters.Add("@Description", SqlDbType.VarChar).Value = "My App"; 

sqlcomSMCheckin.CommandTimeout = this.iCommandTimeOut; 

if (sqlcon.State == ConnectionState.Closed) 
{ 
    sqlcon.Open(); 
} 

if (sqlcomSMCheckin != null) 
{ 
    sqlcomSMCheckin.ExecuteNonQuery(); // error here 
    sqlcomSMCheckin.Dispose(); 
} 
+0

Und Sie sind 100% sicher, dass Sie eine Verbindung zur richtigen Datenbank herstellen? Wie sieht Ihre Verbindungszeichenfolge aus? Haben Sie versucht, "dbo.prc_CheckIn" anzugeben? –

+0

yup die SP läuft alle 20 Sekunden, ich bekomme diesen Fehler zu anderen Zeiten nicht. –

+0

Was hat sich dann seit diesen "anderen Zeiten" geändert ?? –

Antwort

0

Ist sqlCon eine Variable auf Klassenebene, haben Sie Probleme mit derselben Methode, die mehrmals aufgerufen wird? Gibt es etwas Statisches in der Klasse? Verwenden Sie mehrere Threads?

+0

Das war es. Das Einpacken half mir definitiv, aber blöd verpasste ich etwas so Offensichtliches. Danke ck für das Aufzeigen .. Ran der Prozess das ganze Wochenende hat den Fehler nicht bekommen. –

0

die sproc „prc_CheckIn“ Stellen Sie sicher, in der SQL Server existieren Sie eine Verbindung herstellen. Vielleicht ist es falsch geschrieben und für den Benutzer in der Verbindung nicht zugänglich.

+0

prc_ChecIn existiert. Dieses Stück Code läuft gut ohne Problem, außer dass ich gelegentlich diesen Fehler –

1

Nicht 100% sicher, was hier vor sich geht - aber können Sie diesen Codeschnipsel ausprobieren?

using(sqlcon = new SqlConnection(strSqlconnection)) 
{ 
    using(SqlCommand sqlcomSMCheckin = new SqlCommand("dbo.prc_CheckIn", sqlcon)) 
    { 
     sqlcomSMCheckin.CommandType = CommandType.StoredProcedure; 

     sqlcomSMCheckin.Parameters.Add("@Description", SqlDbType.VarChar, 50) 
      .Value = "My App"; 

     sqlcomSMCheckin.CommandTimeout = this.iCommandTimeOut; 

     sqlcon.Open(); 
     sqlcomSMCheckin.ExecuteNonQuery(); 
     sqlcon.Close(); 
    } 
} 

ich ersetzen „prc_CheckIn“ mit „dbo.prc_CheckIn“, gebe ich eine maximale Länge auf den VARCHAR-Parametern (nach Bedarf anpassen), wickelt alles in mit {} Blöcken - das ist es.

Erhalten Sie immer noch den gleichen Fehler ??

Marc

+0

yup bekomme.Hat alle genannten Änderungen vorgenommen und erhält immer noch den Fehler. hat die Datenbankqualifikation auch für die SP hinzugefügt. Also ist es abc.dbo.prc_CheckIn jetzt. Der Code läuft alle 20 Sekunden und es läuft für einige Minuten gut und dann bekomme ich das plötzlich. Ich sollte erwähnen, dass die Methode, in der sich dieser Code befindet, von mehreren Threads verwendet wird. –

0

Sie sollen immer Ihre SQLConnection- schließen unmittelbar nach dem sqlcommand Ausführung

Ist dies nicht Teil einer Funktion ist, dann ist es mit neuer Wiederherstellung ist nicht erforderlich - nur zur Eröffnung wird es ausreichend sein, .

+0

Die Verbindung wird unmittelbar danach geschlossen. Das Code-Snippet enthält es nicht. –

1

HALLO

Der Code OK scheint (ich empfehle, dass Sie die using-Klausel verwenden, wie in einem frühen answrer Ihnen gezeigt). Ich frage mich, ob das Problem nicht innerhalb der gespeicherten Prozedur liegt. Versuchen Sie, es zu debuggen, oder fügen Sie am Anfang und am Ende Ihrer gespeicherten Prozedur mindestens eine Protokollaufzeichnung hinzu, um sicherzustellen, dass sie jedes Mal OK beendet.

+0

Dies ist eine gute Idee - denken Sie daran, der Fehler, den Sie sehen, ist manchmal das Ergebnis eines tieferen Fehlers, der bis zu dem Punkt durchgebrannt ist, an dem er gemeldet wird. In diesem Fall sollten Sie, da der Code normalerweise funktioniert, externe (Datenbank-) Einflüsse berücksichtigen. –

0

Haben Sie versucht, Verbindungspooling und/oder mehrere aktive Ergebnissätze zu deaktivieren? Ich vergesse die Option für die Verbindungszeichenfolge, aber wenn Sie den Builder für Verbindungszeichenfolge aufrufen, sollte er im erweiterten Eigenschaftenraster sein. Oder auf www.connectionstrings.com.

Ist dies auch eine "Benutzerinstanz" -Datenbank wie wenn Sie eine .mdf-Datei zu einem Visual Studio-Projekt mit SQL Express hinzufügen?