Veröffentlicht 23. November 201410 j Hallo zusammen, im Rahmen meines Abschlussprojekts muss ich CLR-Funktionen für den MSSQL-Server programmieren. Nun stehe ich vor dem Problem, das ich innerhalb einer Funktion auf denselben Server zugreifen möchte. Was ich dazu im Internet gefunden habe, wäre: using(SqlConnection connection = new SqlConnection("context connection=true")) { connection.Open(); // Use the connection } Allerdings gibt mir das immer ein System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. zurück. Habe jetzt erstmal eine kleine Testfunktion geschrieben, damit ich nicht immer alles Komipilieren muss. Testfunktion: [Microsoft.SqlServer.Server.SqlFunction(DataAccess = Microsoft.SqlServer.Server.DataAccessKind.Read)] public static string test() { using (SqlConnection conn = new SqlConnection("context connection=true")) { //create a command from the current context SqlCommand cmd = conn.CreateCommand(); //execute something cmd.CommandText = "select @@version"; conn.Open(); return (string)cmd.ExecuteScalar(); } } Fehlermeldung: Meldung 6522, Ebene 16, Status 1, Prozedur test, Zeile 0 .NET Framework-Fehler beim Ausführen der benutzerdefinierten Routine oder des benutzerdefinierten Aggregats 'test': System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. System.NullReferenceException: bei System.Data.SqlServer.Internal.ClrLevelContext.GetCurrentContextForLobAccess(CClrLobContext* pLobContext) bei System.Data.SqlServer.Internal.ClrLevelContext.GetXvarWlobStream(CXVariantBase* pxvarSource, XvarLOBStreamInitCode eCode, Int64 lcid, SqlCompareOptions compareOpts, CClrLobContext* pLobContext) . Würde mich über jegliche Lösungsansätze freuen. LG EDIT: Der Assembly wird mithilfe von C# programmiert. Bearbeitet 23. November 201410 j von Serear
23. November 201410 j Autor Habe den Code jetzt mal abgeändert in [Microsoft.SqlServer.Server.SqlFunction(DataAccess = Microsoft.SqlServer.Server.DataAccessKind.Read)] public static int test() { using (SqlConnection conn = new SqlConnection("context connection=true")) { //create a command from the current context SqlCommand cmd = conn.CreateCommand(); //execute something cmd.CommandText = "select count(*) from Mitarbeiter"; conn.Open(); int i = (int)cmd.ExecuteScalar(); i++; return i; } } Was im ungefähren dem entspricht, was ich den auch vor habe. Ich möchte mit den Daten innerhalb dieser Funktion weiter arbeiten. Dies läuft glatt durch, nur sehe ich momentan absolut nicht, warum es beim anderen nicht geklappt hat. Bin davon ausgegangen das "System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. " sich auf die Context-Verbindung bezogen hat. Lg
23. November 201410 j Hallo, im folgenden Beispiel wird zunächst Connection.open() aufgerufen. Kontextverbindung Gruß Jogibaer0411
24. November 201410 j Autor Moin, erstmal Danke für deine Antwort. Glaube allerdings nicht das es dadran lag, da die eigentliche Ausführung des SQL-Statements auch in meinem Code erst nach dem Connection.Open() erfolgte. Lg Malte
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.