INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

SQL-Server Kommunikationsproblem TimeOut?



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

04.06.2018, 10:12
Beitrag #1

LabFool Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2010

2010
2003
DE


Deutschland
SQL-Server Kommunikationsproblem TimeOut?
Moin,

ich verwende das Data-Connectivity-Tool zur Kommunikation von LV mit dem SQL-Server SQLSERVER Express 2014 von Microsoft. Das funktioniert normalerweise.

Jetzt habe ich aber das Problem, dass LV keine Datensätze empfängt, obwohl der Server welche liefert.

Ich rufe aus LV eine sogenannte gespeicherte Prozedur auf dem Server auf. Diese beinhaltet u.a. folgenden SQL-Code:

INSERT INTO dbo.tblTest(Data) SELECT * FROM OPENROWSET( BULK 'C:\Data\Test.dat',SINGLE_CLOB) AS Data'
SELECT 0 AS ERRORCODE, NULL AS ERRORMESSAGE


Es wird eine Datei von der Platte gelesen und diese in eine Tabelle geschrieben. Direkt danach soll die gespeicherte Prozedur mit dem Code 0 und einer leeren Fehlermeldung beendet werden.

Mache ich das z.B. von MSAccess aus, dann wird tatsächlich eine 0 und NULL zurückgegeben. Das SQL-Konstrukt ist daher korrekt und die einzulesende Datei existiert. Auch gibt es keinerlei Datenkonflikte.

Mit LV bleibt Resultrecordset aber leer, es wird kein Datensatz empfangen. Kommentiere ich den INSERT-Teil raus, dann erhält LV den Datensatz.

Man kann jetzt ein Timing-Problem vermuten. Das Einlesen einer Datei von der Platte dauert einen Moment und LV warten anscheinend nicht lange genug auf eine Rückmeldung und bricht ab. Wenn der INSERT-Teil fehlt, geht alles schnell genug und LV fängt den Recordset.

Ich finde allerdings keine Einstellungen bzgl. eines Timeouts. Zwar bietet das VI DB Tools Open Connection einen entsprechenden Eingang, doch der gilt wohl nur für den Aufbau der Verbindung zum Server und nicht für das Warten auf eine Ergebnis. Außerdem steht der Timeout hier per Default auf 15 sec. Das ist eine Ewigkeit und so lange dauert auch das Einlesen und speichern der Datei bei Weitem nicht.

Hat jemand einen Tipp, was hier das Problem sein könnte bzw. wie eine Lösung aussehen könnte?



Gruß

LFool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.06.2018, 10:33
Beitrag #2

jg Offline
CLD & CLED
LVF-Team

Beiträge: 15.331
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: SQL-Server Kommunikationsproblem TimeOut?
Zu wenig Infos...

Wenn irgendetwas im SQL-Toolkit abgebrochen wird oder einen Timeout läuft, dann solltest du eine entsprechende Fehlermeldung im Errorcluster bekommen. Wie sieht es damit aus?

Wie sieht der LabVIEW-Code zum Aufruf deiner Stored-Procedure aus?
Wie sieht der Code der Stored-Procedure aus?

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.06.2018, 11:14
Beitrag #3

LabFool Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2010

2010
2003
DE


Deutschland
RE: SQL-Server Kommunikationsproblem TimeOut?
Hallo Jens,

LV bringt keinen Fehler im Cluster.

Das VI habe ich mal vereinfacht und hier als Screenshot angehängt.

   

Die gespeicherte Prozedur sieht (vereinfacht) wie folgt aus:

   


Hinweise:
  • Wenn ich einen falschen Filenamen angebe, dann greift die CATCH-Anweisung und LV erhält auch den Rückgabedatensatz.
  • Wenn ich die INSERT-Anweisung auskommentiere, dann erhält LV den Rückgabedatensatz
  • Die ASCII-Datei wird in ein Datenfeld vom Typ nvarchar(max) geschrieben und hat eine Länge von grob 700kB
  • schreibe ich keine Datei sondern einen String, z.B. 'NN' in das Datenfeld, dann erhält LV den Rückgabedatensatz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.06.2018, 13:27
Beitrag #4

LabFool Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2010

2010
2003
DE


Deutschland
RE: SQL-Server Kommunikationsproblem TimeOut?
Nachtrag:

ich hatte erwähnt, dass wenn ich die gespeicherte Prozedur aus Access heraus aufrufe, dass dann der richtige Rückgabedatensatz auch gelesen wird.

Nach weiteren Tests kann ich sagen, dass das aber nur für DAO gilt und nicht für ADO.

Soweit ich das weiß, nutzt LV ADO.

Somit wäre das kein LV-Problem sondern ein ADO-Problem. Trotzdem kann ich mir nicht zusammenreimen, warum das Konstrukt nicht so gehen sollte. Das ist doch nichts außergewöhnliches.

Gruß

LFool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.06.2018, 09:51
Beitrag #5

LabFool Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2010

2010
2003
DE


Deutschland
RE: SQL-Server Kommunikationsproblem TimeOut?
Das Problem ist mittlerweile gelöst.

in der gespeicherten Prozedur fehlte ein

SET NOCOUNT ON;

Damit lieferte diese eben nicht nur den Datensatz zurück, den ich erzeugt habe sondern auch die Anzahl der durch den INSERT-Befehl eingefügten Datensätze. Dies wird durch die genannte Option unterbunden.

Gruß

LabFool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  TimeOut bei Abfrage SQL-Datenbank kwakz 5 2.693 24.07.2013 06:06
Letzter Beitrag: kwakz

Gehe zu: