AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken C# SQL MessageId aus einer SQLCLR Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

SQL MessageId aus einer SQLCLR Funktion

Ein Thema von Jelly · begonnen am 15. Jan 2007 · letzter Beitrag vom 16. Jan 2007
 
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#1

SQL MessageId aus einer SQLCLR Funktion

  Alt 15. Jan 2007, 17:18
Datenbank: MSSQL • Version: 2005
Ich habe hier ein Problem mit den SQL Fehlercodes. Ich erklär erst einmal was ich überhaupt mache:

im SQL Server 2005 nutze ich eine .NET Funktion (SQLCLR). Innerhalb dieser .NET Funktion greife ich auf einen Webservice zu, der mir einen Wert einer bestimmten Berechnung zurückliefert. Diesen Wert soll die .NET Funktion dann an den Aufrufer zurückgeben.

Das klappt auch alles so wie es soll, ne richtig feine Sache. Nur habe ich zur Zeit Probleme mit der Fehlerbehandlung. Tirtt im Webservice ein Fehler auf, so knallts mit in der .NET Funktion (in C# geschrieben), welche mir dann den Fehler an den SQL Server zurückliefert. Der sieht dann in etwa so aus:

Msg 6522, Level 16, State 1, Line 2
A .NET Framework error occurred during execution of user defined routine or aggregate 'ReadInt':
System.Web.Services.Protocols.SoapException: Server was unable to process request. -->
Logical Itemname n12 for Device rbg does not exist in loaded itemslist.
System.Web.Services.Protocols.SoapException:
at System.Web.Services.Protocols.SoapHttpClientProtoc ol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtoc ol.Invoke(String methodName, Object[] parameters)
at TOPCService.ReadInt(String Itemname, String DeviceName)
at Functions.ReadInt(String Itemname, String DeviceName)
.

Aus dieser langen Fehlermeldung hab ich mal die wichtigen Dinge blau markiert. Der Fehlermeldungstext wird aus dem Webservice gesetzt, jedoch habe ich da natürlich keine Möglichkeit, die Msg Id zu setzen. Bei jedem Fehler, der auftritt, schmeisst mir der SQL Server immer nur die Msg 6522 zurück. Aber genau diesen Fehler muss ich auswerten, und zwar so effizient wie nur möglich.

Ich dachte daran, in der .NET Funktion in C# den Fehler im catch Block abzufangen, und dort aufgrund des Fehlertextes "Logical Itemname n12 for Device rbg does not exist in loaded itemslist." diesen auszuwerten und eine benutzerdefinierte Msg Id zurückzuliefern. Somit hätte ich eine bessere Flexibilität bei der Auswertung des Fehlers im SQL Server.

Und genau da häng ich. Die C# Funktion sieht zur Zeit so aus:
Code:
public static String ReadString(String Itemname, String DeviceName)
    {
        String S;
        TOPCService OPC;
        try
        {
            OPC = new TOPCService();
            OPC.Url = RegSettings.UrlWebService();
            S = OPC.ReadString(Itemname, DeviceName);
            OPC.Dispose();
        } catch (Exception e) {
            S = "";
            ArgumentException ec = new ArgumentException("Item not found");
            throw ec;
        }

        return (String)S;
    }
Nur krieg ich mit dem Code natürlich die MsgId nicht geändert. Ich müsste im Catch Block den Fehler analysieren können und eine entsprechende exception auslösen. In T-SQL ginge das mit RAISEERROR MsgId,-1,-1 aber in .NET ?

Ich hoff mein Problem wurde verstanden
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz