Question

I am having problems with Creating Control Arrays and getting the Column Names for a table, I know that my string works as I have used the outputted string straight as a SQL query, the problem lies where it seems not to find any of the rows in the table(that i know are their, using the If lrd.HasRows Then I have seen that it does not find any rows (lrd.HasRows = False). Is their a diffent Connection string for INFORMATION_SCHEMA.COLUMNS ?

'Finds the Column Name

Public Sub findSQLColumnName(ByRef i As Integer, ByRef OutputValue As String, ByVal tableName As String)
    Dim con As New SqlConnection
    Dim cmd As New SqlCommand
    Dim lrd As SqlDataReader

    Dim TableNameParm As New SqlParameter("Tablename", tableName) 'adds in the new paramenter UserName
    TableNameParm.Direction = ParameterDirection.Output
    Dim LocationParm As New SqlParameter("Location", i) 'adds in the new paramenter UserName
    LocationParm.Direction = ParameterDirection.Input

    Call FindConnectionString(con) ' finds connection string

    cmd.Parameters.Add(TableNameParm)
    cmd.Parameters.Add(LocationParm)

    Call SQLSELECT_WHERE("INFORMATION_SCHEMA.COLUMNS", "COLUMN_NAME AS Output, ORDINAL_POSITION", True, " (TABLE_NAME = @Tablename) AND (ORDINAL_POSITION = @Location)", con, cmd, lrd)

    Try
        ' While lrd.Read()    ' code writen within here for what is to be done with selected data.
        'Call findSQLColumnValue("Output", lrd, OutputValue)
        'End While

        If lrd.HasRows Then
            lrd.Read()
            Call findSQLColumnValue("Output", lrd, OutputValue)
            lrd.Close()
            'Close connection before Redirecting.
        Else
            lrd.Close()

        End If

        '    Catch ex As Exception
    Finally
        con.Close()
    End Try

End Sub

'Finds the value of a Column

Public Sub findSQLColumnValue(ByRef ColumnName As String, loader As SqlDataReader, ByRef OutputValue As String)
    OutputValue = (Convert.ToString(loader(ColumnName))).Trim
End Sub

'Button Click (Creates the control array)

Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim SQLCode As New SQLCode
    Dim TableLength As Integer
    Dim lblText(100) As String
    Call SQLCode.SQLFindNoColumns("PatientClinicalinformation", TableLength, lblTitlePatient, lblText)
    For i As Int16 = 1 To TableLength
        ' Create the label control and set its text attribute
        Dim Label2 As New Label
        Call SQLCode.findSQLColumnName(i.ToString, lblText(i), "PatientClinicalinformation")
        Label2.Text = lblText(i)

        Dim Literal2 As New Literal
        Literal2.Text = "<br />"

        ' Add the control to the placeholder
        PlaceHolder1.Controls.Add(Label2)
        Label2.ID = "lbl" & i
        PlaceHolder1.Controls.Add(Literal2)
    Next

End Sub

'SelectWhere

 Public Sub SQLSELECT_WHERE(ByVal Tables As String, ByVal Columns As String, ByVal WHERE As Boolean, ByVal WHEREStatement As String, ByRef connection As SqlConnection, ByRef command As SqlCommand, ByRef loader As SqlDataReader)
    connection.Open()
    command.Connection = connection
    If WHERE = False Then
        command.CommandText = " SELECT " & Columns & " FROM " & Tables
    End If
    If WHERE = True Then
        command.CommandText = " SELECT " & Columns & " FROM " & Tables & " WHERE " & WHEREStatement
    End If
    command.CommandText = command.CommandText
    loader = command.ExecuteReader()
End Sub
Was it helpful?

Solution 2

It's hard to say without knowing the function SQLSELECT_WHERE, but it's possible one or more of the parameters is not correct. Try skipping that function and use

cmd = New SqlCommand("SELECT ... WHERE", conn)

You can also test the number of rows by using count(*) in the query.

OTHER TIPS

I found the solution! the code all worked there was a problem with the array TableNameParm

   Dim TableNameParm As New SqlParameter("Tablename", tableName) 'adds in the new paramenter UserName
    TableNameParm.Direction = ParameterDirection.Output
    Dim LocationParm As New SqlParameter("Location", i) 'adds in the new paramenter UserName
    LocationParm.Direction = ParameterDirection.Input

The TableNameParm.Direction should be an input but is set to a Output

       Dim TableNameParm As New SqlParameter("Tablename", tableName) 'adds in the new paramenter UserName
    TableNameParm.Direction = ParameterDirection.Input
    Dim LocationParm As New SqlParameter("Location", i) 'adds in the new paramenter UserName
    LocationParm.Direction = ParameterDirection.Input
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top