Frage

Wir haben eine klassische ASP-Anwendung, die einfach funktioniert und wir haben verabscheuen, den Code zu ändern gewesen, damit wir nicht den Zorn von einigen längst verstorbenen griechischen Göttern berufen.

Wir hatten vor kurzem die Anforderung, eine Funktion zu einer Anwendung hinzuzufügen. Das Feature Implementierung ist wirklich nur eine Datenbankoperation erfordert nur eine minimale Änderung an der Benutzeroberfläche.

änderte ich die UI und machte die kleine Änderung einen neuen Datenwert an den sproc Aufruf (sproc1).

einreichen

In sproc1, die direkt von ASP aufgerufen wird, haben wir einen neuen Anruf zu einem anderen sproc, die auf einem anderen Server zu Fall sproc2.

Irgendwie ist dies nicht über unseren ASP-App funktioniert, funktioniert aber in SQL Management Studio.

Hier die technischen Details:

  1. SQL 2005 auf beiden Datenbankservern.
  2. SQL-Anmeldung authentifiziert von der ASP-Anwendung auf SQL 2005 Server 1.
  3. Linked Server von Server 1 auf Server 2 arbeitet.
  4. Wenn sproc1 von SQL Management Studio ausgeführt wird - funktioniert einwandfrei. Auch wenn als der Benutzer unseres Code credentialed verwendet (die Anwendung SQL-Anmeldung).
  5. sproc2 funktioniert, wenn unabhängig von sproc1 von SQL Management Studio genannt.
  6. VBScript (ASP) fängt einen Fehler, der an den Client in der XML-zurück emittiert wird. Fehlernummer ist 0, Fehlerbeschreibung ist leer. Sowohl aus dem ADODB.Connection Objekt und von welcher Err.Number / Err.Description Ausbeuten in VBScript von der Seite ASP.

So ohne irgendwelche Fehler, noch eine Reproduzierbarkeit (das heißt durch SQL Mgmt Studio) - jemand das Problem kennt?

Unser aktueller Plan ist, zu brechen und in den Code auf der ASP-Seite zu graben und einen völlig separaten Aufruf zum Server 2.sproc2 macht direkt von ASP anstatt zu huckepack durch sproc1 versuchen.

War es hilfreich?

Lösung

Meine erste Reaktion ist, dass dies kein Problem des Aufrufs Quer Server sein könnte, aber einer von einer zweiten proc von einem ersten Aufruf, und das diese könnte das sein, was in den beiden verschiedenen anders benimmt Umgebungen.

Meine erste Frage lautet: Was passiert, wenn man den Quer Server Aspekt aus der Gleichung entfernen? Wenn Sie ein Testsystem einrichten könnten, wo Sie Ihre erste proc Ihre zweite proc fordert, aber die zweite proc ist auf dem gleichen Server und / oder in der gleichen Datenbank, erhalten Sie immer noch das gleiche Problem?

Neben diesen gleichen Linien: In meiner Erfahrung, wenn die Anwendung und SSMS haben unterschiedliche Ergebnisse wie das bekommen, es war oft ein Problem der Einstellungen Stored Procedures. Es könnte sein, wie Lukas sagt, NOCOUNT. Ich habe diese Art der Sache von Fremd PRINT-Anweisungen im Code passieren musste, obwohl ich scheine den aufgedruckten Wert zu einem Teil der Fehlerbeschreibung (sehr counterintuitively) zu erinnern.

Wenn alles wird im Fenster Meldungen zurückgegeben, wenn Sie dies in SSMS ausführen, herauszufinden, woher es kommt und machen es zu stoppen. Ich würde die Fachbegriffe nachschlagen muß, aber meine Erinnerung ist, dass verschiedener Abfrage- Umgebungen unterschiedliche Empfindlichkeiten auf „Fehler“ hat, und dass eine Standardverbindung über SSSM keinen Fehler zu bestimmten Zeiten werfen, wenn eine ADO-Verbindung von einer Skriptsprache wird .

Ein letzter Gedanke: falls es sich um eine Umgebung Sache ist, versuchen Sie verschiedene Einstellungen auf die Verbindungszeichenfolge der ASP-Seite. Zum Beispiel, wenn Sie eine OLEDB-Verbindung haben, versuchen Sie ODBC. Versuchen Sie, die native und nicht-native SQL Server-Treiber. Lesen Sie, welche Verbindungszeichenfolge Optionen, um Ihren Provider unterstützt, und versuchen, eine von ihnen, die scheinen, wie sie wert sein könnte versuchen.

Andere Tipps

Hast du gesetzt nocount auf in beiden gespeicherten Prozeduren festgelegt? Ich hatte ein ähnliches Problem einmal und während ich nicht mehr genau, wie ich es im Moment gelöst, ich weiß, dass etwas mit ihm zu tun hatte!

Sie leiden unter dem double-Hop-Problem

Das Double-Hop-Problem ist, wenn die ASP / X-Seite versucht, Ressourcen zu nutzen, die auf einem Server befinden, das vom IIS-Server unterscheidet.

Windows NT Challenge / Response nicht Double-Hop-Imitationen (in dieser einmal vergangen unterstützt auf den IIS-Server können die gleichen Anmeldeinformationen nicht an einen back-End-Server für die Authentifizierung) übergeben werden.

Sie sollten die versucht zweite Verbindung mit SQL Profiler überprüfen.

Beachten Sie, dass mit dem manuellen Testen Sie nicht über IIS authentifizieren. Es ist nur, wenn Sie die SQL über den ASP / X Seite initiieren, dass dieses Problem manifestiert.

Weitere Informationen:

Ich hatte ein ähnliches Problem, und ich löse es durch nocount auf Einstellung und Druckbefehle zu entfernen.

Beispiel-Code könnte helfen :) Sie versuchen, zwei Tabellen aus der gespeicherten Prozedur zurückzukehren; Ich glaube nicht, 2.6 ADO mehrere Tabellen zurückgegeben werden verarbeiten kann.

habe ich den (Double-Hop) betrachten, aber was ist der Unterschied zwischen einem sproc-in-a-sproc Aufruf wie ich meine, im Vergleich zu einem typischen Quer Server über INNER JOIN JOIN? Beide würden auf Server1 ausgeführt werden, die Verbindungsserver-Anmeldeinformationen und die Authentifizierung auf Server 2.

Kann jemand bestätigen, dass ein sproc Quer Server Aufruf anders als ein Tabellen auf Daten verbinden tun? Und warum?

Wenn der Linked Server Config ein SQL-Konto ist -, dass ein Double-Hop betrachtet wird (? Da das, was Sie sich auf NTLM Doppel Hopfen ist)

Im Hinblick darauf, ob mehrere Result kommen zurück - nein. Sowohl Server1.Sproc1 und Server2.Sproc2 wäre „ExecuteNonQuery ()“ in der .net Welt und zurück nichts (keine Resultsets und keine Rückgabewerte).

Versuchen Sie, die Berechtigungen für die Datenbank für den Benutzer in der Verbindungszeichenfolge angegeben zu überprüfen. Verwenden Sie den gleichen Benutzernamen in der Verbindungszeichenfolge zu der Datenbank anzumelden, während SQL-mgmt Studio verwenden.

erstellen eine temporäre Tabelle der Zwischenwerte und Ausnahmen zu schreiben, da es sich um eine effektive Art der Fehlersuche in Ihrer Anwendung sein kann.

Kann ich nur überprüfen: Sie haben den Zusatz von sproc2? Zuvor ist es funktioniert gut für Jung und Alt.

Könnten Sie nicht, wo Sie sproc2 von rufen ändern? Anstatt es von innen sproc1 aufrufen, können Sie es von der ASP nennen? Auf diese Weise können die Authentifizierung steuern im Code SQL, und müssen alle vertraut auf die Einrichtung nicht verlassen oder gemeinsam genutzte Remote-Authentifizierung auf den Servern.

Wie wird Ihr Verbindungsserver einrichten? Sie haben in der Regel ein paar Möglichkeiten, wie es authentifiziert auf den Remote-Server, der als die aktuell angemeldeten Benutzer umfassen anmelden oder eine SQL-Anmeldung der Angabe immer zu verwenden. Haben Sie versucht, es einstellen, um immer ein bestimmtes Konto verwenden? Das sollte alle möglichen Probleme mit Berechtigungen beseitigt in der Remote Procedure Aufruf ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top