2017-09-14 1 views
1

Ich bin beschäftigt Portieren einer klassischen ASP-Site. Für einen bestimmten Aufruf von SQL Server 2012 über ODBC, verwende ich den folgenden Code:Aufruf an SQL Server von klassischem ASP und ADO wird getrenntes Re-Cord-Set nicht geöffnet

objRS.CursorLocation = adUseClient 
objRS.Open strSQL, objConn, adOpenStatic, adLockBatchOptimistic 

Verwenden von SQL Server Profiler kann ich den Anruf sehen gemacht wird und die gleiche Abfrage direkt in SQL Server Management Studio ausgeführt kehrt mein Aufzeichnungen.

ich dann mit dem folgenden Code weiter:

Set objRS.ActiveConnection = Nothing 
objConn.Close 
set objConn = Nothing 
Set GetRecordSet = objRS 
set objRS = Nothing 

wo GetRecordSet der Name der Funktion ist.

In der aufrufenden Seite, wo ich meine Recordset gleich GetRecordSet, führe ich eine Überprüfung mit if not RS.EOF then Abstürze mit Abfrage kann nicht auf einem geschlossenen Recordset durchgeführt werden. Es sollte getrennt sein, aber aus irgendeinem Grund versagt es.

Update: Interessanterweise ist die SQL, die übergeben wird, die fehlschlägt, ein gespeicherter Prozess. Wenn ich den übergebenen Wert als select * from mytable ändere, funktioniert es. Auf der db-Seite hat der Benutzer, mit dem ich mich über ODBC verbinde, Lese-/Schreib- und Ausführungsrechte für den Stored Proc.

+0

Es ist bestehenden Code von der ursprünglichen Website. Ich versuche nur, so viel von dem Code zu portieren, wie es im Moment ist, bis eine komplette Neuschreibung erfolgt. – bilpor

+0

Meinst du "wenn nicht GetRecordSet.EOF" ?, weil ich in deinem Code keine Variable namens "RS" sehe und objRS ist geschlossen. Abgesehen davon, warum schließen Sie das Recordset und die Verbindung nicht, nachdem Sie sie verwendet haben? Sie werden trotzdem bereinigt, wenn die Seite fertig ist, und die offene Verbindung kann verwendet werden, um bei Bedarf weitere Abfragen auszuführen. –

+0

Die obigen sind nur die wichtigen Schnipsel. Wie bereits gesagt, funktioniert alles auf SQL Server 2005 unter Windows Server 2003, es spielt nur mit SQL Server 2012 auf Windows 2012. Ich habe versucht, das Recordset zu öffnen mit 'objRs.Open strSQL, objConn, adOpenStatic, adLockReadOnly, adCmdText' und Blick auf den Inhalt von objRS sofort beim Comeback und es hieß immer noch im unmittelbaren Fenster, dass das Objekt geschlossen wurde. – bilpor

Antwort

0

Der Fehler um Daten zentriert. In der SP habe ich dateformat auf DMY gesetzt. Die DB-Sprache ist auf Britisches Englisch eingestellt. In der ODBC-Verbindung wurde die Sprache für SQLSErver-Nachrichten ebenfalls auf Britisches Englisch festgelegt. Was ich nicht festgelegt hatte, war Use regional settings when outputting currency,numbers, dates and times im ODBC-Treiber. Wenn Sie also mit dem Resultset zurückkehrten, kehrte es zu den Standardeinstellungen zurück und ordnete die Datumswerte nicht korrekt zu und löschte das Resultset.

Verwandte Themen