DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren



 

Forum: ADO.NET | Thema: Unerklärlicher Fehler | Von: Stephan  ( 31.03.2005 12:22)

Hallo,
ich hab in meinem Projekt eine Stelle an der ich eine Stored Proc ausführe mit Execute Reader. Da ich aber weiters dann die Daten in Form einer Datatable benötige habe ich mir eine Funktion aus dem Internet kopiert, welche die Daten umwandelt. Das hat bisher immer gut funktioniert, aber nun ist die Datenmenge, welche durch ExecuteReader aufgerufen wird gewaltig gewachsen und nun kann es passieren, dass es nicht funktioniert. Leider kann ich mir diesen Fehler nicht erklären, darum hier der Code:

Dim objConn As New SqlClient.SqlConnection()

Dim objCommand As SqlClient.SqlCommand = objConn.CreateCommand
Dim objReader As SqlClient.SqlDataReader
Dim dtResult As DataTable
Dim drResult As DataRow
Dim alList As New ArrayList()

objCommand.CommandType = CommandType.StoredProcedure
objCommand.CommandText = "sp_Applicant_Search"
objCommand.CommandTimeout = 0
With objCommand.Parameters
.Add("@Query", xstrXML)
.Add("@SiteID", xiSiteID)
.Add("@MaxRows", iMaxRows)
.Add("@TotalCount", SqlDbType.Int)
End With
objCommand.Parameters("@Query").Direction = ParameterDirection.Input
objCommand.Parameters("@SiteID").Direction = ParameterDirection.Input
objCommand.Parameters("@MaxRows").Direction = ParameterDirection.Input
objCommand.Parameters("@TotalCount").Direction = ParameterDirection.Output


While Not ADO.Open(objConn)
'Try to open the connection
End While
objReader = objCommand.ExecuteReader
dtResult = ADO.ConvertDataReaderToDataTable(objReader)

ADO.Open ist eine von mir geschriebene Funktion, welche die Connection öffnet und True zurückgibt, wenn dies erfolgreich war.


Convert Datareader to Datatable:

Public Shared Function ConvertDataReaderToDataTable(ByRef reader As SqlDataReader) As DataTable
Dim schemaTable As dataTable = reader.GetSchemaTable()
Dim dataTable As dataTable = New dataTable()
Dim intCounter As Integer
Dim iTemp As Integer = 0

For intCounter = 0 To schemaTable.Rows.Count - 1
Dim dataRow As DataRow = schemaTable.Rows(intCounter)
Dim columnName As String = CType(dataRow("ColumnName"), String)
Dim column As DataColumn = New DataColumn(columnName, _
CType(dataRow("DataType"), Type))
dataTable.Columns.Add(column)
Next
While reader.Read()
Dim dataRow As DataRow = dataTable.NewRow()
For intCounter = 0 To reader.FieldCount - 1
dataRow(intCounter) = reader.GetValue(intCounter)
Next
dataTable.Rows.Add(dataRow)
iTemp += 1
Debug.WriteLine("Row: " & iTemp)
End While
Return dataTable
End Function



Der Fehler tritt in der Funktion ConvertDataReaderToDatatable auf und zwar in der Zeile:

dataRow(intCounter) = reader.GetValue(intCounter)


Der Fehler der ausgegeben wird:

System.Data.SqlClient.SqlException: Timeout ist abgelaufen. Das Zeitlimit wurde vor dem Beenden des Vorgangs überschritten oder der Server reagiert nicht.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, TdsParserState state)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, TdsParserState state)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.ReadNetlib(Int32 bytesExpected)
at System.Data.SqlClient.TdsParser.ReadBuffer()
at System.Data.SqlClient.TdsParser.ReadByteArray(Byte[] buff, Int32 offset, Int32 len)
at System.Data.SqlClient.TdsParser.ReadEncodingChar(Int32 length, Encoding encoding)
at System.Data.SqlClient.TdsParser.ReadValue(_SqlMetaData md, Int32 length)
at System.Data.SqlClient.TdsParser.ProcessRow(_SqlMetaData[] columns, Object[] buffer, Int32[] map, Boolean useSQLTypes)
at System.Data.SqlClient.SqlDataReader.PrepareRecord(Int32 i)
at System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
at epunkt.DataAccess.ADO.ConvertDataReaderToDataTable(SqlDataReader& reader) in C:\Projekt\develop\DataAccess\Database\ADO.vb:line 649
at epunkt.DataAccess.Applicant.Applicant.Search(String xstrXML, Int32 xiSiteID, Int32& xiTotalCount, Int32 iMaxRows) in C:\Projekt\develop\DataAccess\Applicant\Applicant.vb:line 559



Kann mir bitte jemand sagen wie es zu diesem Fehler kommt?

LG

Stephan


Betreff Von Datum
Re: Unerklärlicher Fehler
Konnte das Problem lösen danke.
Stephan 31.03.2005 12:43
Re: Unerklärlicher Fehler
so unerklärlich ist das doch nicht, <br>der Timeout ist abgelaufen, was du ja selber einräumst an der großen datenmenge leigt<br><br>Die Dauer kann man per CommandTimeout einstellen
Hannes Preishuber 31.03.2005 12:45
Re: Unerklärlicher Fehler
Gilt die Einstellung des CommandTimeout´s für jeden einzelnen Read() Vorgang?<br><br>mfG, Kris
G. Guest 02.05.2005 11:15
Re: Unerklärlicher Fehler
Beginnt der Name einer SP mit "sp_", so nimmt der SQL Server an, dass dies ein System-Procedure ist und sucht diese folglich zuerst in der master db ! Findet er sie dort nicht verwendet er die...
G. Guest 10.11.2005 15:17

Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!

 Betreff:
 Nachricht: Den Beitrag finden Sie nun unter: http://beta.devtrain.de/foren Die Benutzerdaten und Foreninhalte von beta.devtrain.de und www.devtrain.de sind die selben.
Sie können sich dort sogar per RSS über neue Inhalte informieren lassen.
Bei Problemen bitte direkt Mail an asp [AT] ppedv.de.

 Signatur:

  



Login
Username:


Passwort:






Passwort vergessen?

Advanced Developers Conference vom 14.-15. Februar 2011

© Copyright 2003 ppedv AG