none
Generic SQL Error bei Update von Entitätsattributen RRS feed

  • Frage

  • Hallo,

    beim Speichern einer Entität über die OData-Schnittstelle und auch über den OrganizationService bei Plugins erhalte ich einen Generic SQL error.

    Beim Aktivieren des Tracings (Diagnostics Tool) erhalte ich folgende Fehlermeldung in der Log-Datei:

    >Crm Exception: Message: Generic SQL error., ErrorCode: -2147204784, InnerException: System.Data.SqlClient.SqlException (0x80131904): Ungültiger Objektname 'DBName.dbo.EntityNameExtensionBase'.

    Interessant ist, dass man den selben Fehler im SQL-Management-Studio bekommt, wenn man beim Absetzten eines Statements nicht die Datenbank angibt, wo es ausgeführt werden soll.

    Meine Vermutung ist daher, dass beim Absetzten des SQL-Statements von CRM 2011 ein Fehler passiert.

    Hat irgendwer eine Ahnung warum das passiert und vor allem wie man diesen Fehler beheben kann?

    Hinweis: Die Organisation wurde von 4.0 auf Crm 2011 migriert (vielleicht ist hier etwas schief gegangen)

     

    Freundliche Grüße

    Klemens

     

     

    Montag, 23. Januar 2012 15:05

Antworten

  • Hallo!

     

    Hab das Problem gefunden. War leider ein internes (blödes) Problem. Auf der Datenbank war ein Trigger registriert der noch einen Verweis auf die alte DB gehabt hat.

    Ich hoff ich hab euch nicht zuviel aufgehalten und irritiert.

     

    Schöne Grüße Klemens

     

    • Als Antwort markiert k.duschlbauer Dienstag, 24. Januar 2012 09:53
    Dienstag, 24. Januar 2012 09:47

Alle Antworten

  • Hallo Klemens,

    ohne Dein Statement näher zu kennen, fällt eine Fehleranalyse sehr schwer. Hast Du den OData Query Designer http://bingsoft.wordpress.com/category/crm-2011-odata-query-designer/ verwendet?

     


    Carsten Groth http://carstengroth.wordpress.com Microsoft Certified Technology Specialist
    Montag, 23. Januar 2012 15:44
  • Hallo Klemens,

    Laden dieser angesprochenen Entität über die OData- oder OrganizationService-Schnittstelle funktioniert? Hat der CRM-Server vielleicht mehrere Organisationen bzw. setzt du deine Abfrage sicher gegen die korrekte Organisation ab?

    Ich glaube nicht, dass der Fehler in der Migration liegt, weil sonst mehr Dinge dieses CRM's nicht funktionieren würden.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    Montag, 23. Januar 2012 18:56
  • Hallo,

    werd kurz nochmal die zwei Situation genauer Erklären, welche zu diesem Fehler führen:

    1. JScript mit OData-Zugriff:

    Ich habe eine Erweiterung der GUI mit JScript implementiert. Hierbei werden in einem ersten Schritt die benötigten Daten der jeweiligen Entität geladen und etwaige Änderungen wieder via OData gespeichert. Derzeit ist diese Erweiterung für 5 Entitäten konfiguriert, sowohl System- als auch benutzerdiefiniert Entiäten. Die Daten werden hier Ajax ohne Probleme geladen. Aufruf-Bsp.:

    $.ajax({
          type: "GET",
          contentType: "application/json; charset=utf-8",
          datatype: "jason",
          async: false,
          url: SDK.REST._ODataUrl() + "/" + entityName + "Set(guid'" + id + "')",
          beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
          },
          success: function (data, textStatus, XmlHttpRequest) {
            var wrapper = new EntityWrapper();
            wrapper.setOid(id);
            wrapper.setCrmEntity(data.d);
            wrapper.setRowId(rowId);
            callbackObj.addEntity(wrapper);
          },
          error: function (XmlHttpRequest, textStatus, errorThrown) {
            alert("error");
          }
        });
    


    Beim Speichern der geänderten Daten tritt jedoch nur bei der einen benutzerdefinierten Entität der der genannte Generic SQL Error auf (das Speichern von den anderen Entitäten funktioniert einwandfrei). Code der Save-Methode

    var jsonEntity = window.JSON.stringify(entity);
          $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            datatype: "json",
            data: jsonEntity,
            url: SDK.REST._ODataUrl() + "/" + metaInfo.getEntityName() + "Set(guid'" + id + "')",
            beforeSend: function (XMLHttpRequest) {
              XMLHttpRequest.setRequestHeader("Accept", "application/json");
              //MERGE for update
              XMLHttpRequest.setRequestHeader("X-HTTP-Method", "MERGE");
            },
            success: function (data, textStatus, XmlHttpRequest) {
              callbackObj.resetTempChangeStorage();
            },
            error: function (XmlHttpRequest, textStatus, errorThrown) {
              alert("Fehler beim Speichern!");
            }});
    


    2. Plugin: in einem weiteren Projekt hab ich ein Plugin implementiert und sie da, ich bekomme wieder den selben Fehler (Generic SQL Error) bei dieser Entität. Der Code hierfür sieht auszugsweise wo aus:

    Entity workpackage = service.Retrieve("new_project", id, new ColumnSet(true));
    
    .....
    
     if (workpackage.Contains("new_act_h"))
                    workpackage["new_act_h"] = actHours;
                else
                    workpackage.Attributes.Add("new_act_h", actHours);
    
                if (workpackage.Contains("new_calc_expected_h"))
                    workpackage["new_calc_expected_h"] = expected;
                else
                    workpackage.Attributes.Add("new_calc_expected_h", expected);
    
    .....
    
    service.Update(workpackage);
    

    Ich hoff das ganze ist jetzt nicht zu verwirrend.

     

    Schöne Grüße Klemens

     

    Dienstag, 24. Januar 2012 06:27
  • Hallo Andreas,

    Also das Laden der Entäten funktioniert (siehe vorhergehende Antwort).

    Das Crm hat mehrere Organisationen, aber ich bin mir sicher -soweit man sich in der IT sicher sein kann ;) , dass ich die Abfrage an die richtige Organisation absetze (sonst dürft ja das Speichern der anderen Entitäten auch nicht funktionieren).

    Grüße Klemens

    Dienstag, 24. Januar 2012 06:33
  • Hallo Klemens!

    Benutze try-catch in deinem Script bzw. den Script-Debugger.
    Wird an den SQL-Server der richtige Befehl abgesetzt?


    Ich hoffe das bringt weiter. Andreas(a)Donaubauer.com www.crmfaq.de
    Dienstag, 24. Januar 2012 07:51
  • Hallo!

     

    Hab mir jetzt noch die den OData-Request mit Fiddler (JScirpt-Komponente) angesehen. Bei einer "funktionierenden" und bei der "fehlerhaften" Entität.

    Sind strukturell völlig identisch.

    Fiddler header:

    POST /Test-MSCRM/XRMServices/2011/OrganizationData.svc/AccountSet(guid'06CA3268-D422-E011-80D4-000C2971C7E3') HTTP/1.1
    POST /Test-MSCRM/XRMServices/2011/OrganizationData.svc/WorkpackageSet(guid'51B305AD-B82A-40D3-95B9-525330540BA6') HTTP/1.1

     

    In der JSON-Ansicht von Fiddler hab ich auch keinen Fehler enteckt.

     

    Bzgl. SQL-Statement ist mir jedoch eine Unstimmigkeit aufgefallen.

    Der Fehler sagt das der in einer Datenbank schreiben soll die es nicht mehr gibt (wurde beim Import der Organisation umgestellt). Werd ich mir gleich genauer anschauen. Komisch ist, dass anscheinend nur diese Entität versucht auf eine die "alte" Datenbank zuzugreifen).

     

    Schöne Grüße Klemens

     

    Dienstag, 24. Januar 2012 09:28
  • Hallo!

     

    Hab das Problem gefunden. War leider ein internes (blödes) Problem. Auf der Datenbank war ein Trigger registriert der noch einen Verweis auf die alte DB gehabt hat.

    Ich hoff ich hab euch nicht zuviel aufgehalten und irritiert.

     

    Schöne Grüße Klemens

     

    • Als Antwort markiert k.duschlbauer Dienstag, 24. Januar 2012 09:53
    Dienstag, 24. Januar 2012 09:47