Chris,
NextResult just moves you to the next result, it doesn't go to the
first record of the next result.  You need to do a Read first.

While dr.Read()
  s(0) = dr.GetString(0)
    If dr.NextResult() Then 
       if dr.Read() Then
         s(1) = dr.GetString(0)
       End if
    End if
       
 End While


On 7/15/05, Chris Mohan <[EMAIL PROTECTED]> wrote:
> Hi, i've made the sample code more simple so that its easier to
> read/ focus on the problem/question. (Not to mention that the code
> in my  original post contained errors introduced when i had made
> some changes to it in order to post it here.)
> 
> SO, here is the code that better demonstrates the issue:
> 
> Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)Handles
> MyBase.Load
>         Dim s() As String = GetTSqlObjectsFromDataBase()
>         Response.Write(s(0))
>         Response.Write("<BR>")
>         Response.Write(s(1))
> End Sub
> 
> Function GetTSqlObjectsFromDataBase() As String()
>   Dim conn As New SqlConnection(AppSettings("ConnectionString"))
>   Dim cmd As SqlCommand = conn.CreateCommand()
>   With cmd
>      .CommandType = CommandType.Text
>      .CommandText = "SELECT text FROM dbo.syscomments WHERE " & _
>       "(text LIKE '%CREATE FUNCTION dbo.khan_encrypt_pair%');" & _
>       "SELECT text FROM syscomments WHERE " & _
>       "(text LIKE '%EncryptUserDataAndInsert%')"
>   End With
>         Dim sb As New StringBuilder
>         Dim dr As SqlDataReader
>         Dim s(2) As String
>         Try
>             conn.Open()
>             dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
>             While dr.Read()
>                 s(0) = dr.GetString(0)
>                 If dr.NextResult() Then s(1) = dr.GetString(0)
>             End While
>             Return s
>         Finally
>             conn.Close()
>             conn.Dispose()
>             cmd.Dispose()
>         End Try
>     End Function
> 
> 
> 
> 
> 
> 
> 
> 
> --- In [email protected], "Chris Mohan"
> <[EMAIL PROTECTED]> wrote:
> > 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
> 
> 
> 
> 
> 
> 
> 


-- 
Dean Fiala
Very Practical Software, Inc
http://www.vpsw.com


 
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