Hi, 

I'm getting an error that (in my mind) shouldn't happen based on the 
values of certain data reader properties. 

The Error: System.InvalidOperationException: Invalid attempt to read 
when no data is present.

My query consists of two batched sql statements delimited by a semi-
colon.  I always get the error on the second dr.Read() regardless of 
which of the two batched statements is listed first. Each query 
return results individually and when run together in Query Analyzer. 

The error always happens after i call  If Dr.NextResult() THEN which 
always returns true AND the dataReader's field count is always the 
same as it was during the first read, 1.

That tells me there's a result to read. So why am i getting this 
error??!

The entire code chunk is below
Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)Handles 
MyBase.Load
Dim tSqlObjectNames() As String = {"%CREATE FUNCTION 
dbo.khan_encrypt_pair%", "%EncryptUserDataAndInsert%"}
Me.txtSprocText.Text = GetTSqlObjectsFromDataBase(tSqlObjectNames)
End Sub

Function GetSqlObjs(ByVal names()As String) As String
  Dim conn As New SqlConnection(AppSettings("ConnectionString"))
  Dim cmd As SqlCommand = conn.CreateCommand()
  With cmd
  .CommandType = CommandType.Text
  For i As Int32 = 0 To tSqlObjectNames.Length - 1
   .CommandText += "SELECT text FROM syscomments WHERE (text LIKE 
@text" & i.ToString() & ")"

  If i <> tSqlObjectNames.Length - 1 Then .CommandText += ";"
.Parameters.Add("@text" + i.ToString(),SqlDbType.NVarChar, names
(i).Length).Value = tSqlObjectNames(i)
  Next
  End With
   Dim sb As New StringBuilder
   Dim dr As SqlDataReader
   Try
        conn.Open()
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
        While dr.Read()
            sb.Append(dr.GetString(0))
            If dr.NextResult() Then sb.Append(dr.GetString(0))
        End While
        Return sb.ToString()
   Catch ex As Exception
        ErrorMessage.Text = "error: " & ex.ToString()
        Return sb.ToString()
   Finally
        conn.Close()
        conn.Dispose()
        cmd.Dispose()
   End Try
End Function

I've even run the query without the use of SQL Parameters by 
hardcoding the batched statement and i still get the error.
Here's the statement in one line:
.CommandText = "SELECT text FROM dbo.syscomments WHERE (text LIKE '%
CREATE FUNCTION dbo.khan_encrypt_pair%'); SELECT text FROM 
syscomments WHERE (text LIKE '%EncryptUserDataAndInsert%');"







 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/AspNetAnyQuestionIsOk/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to