Создание массивов управления в Vb 2010 с именами столбцов таблицы, не читающими строки

У меня проблемы с созданием управляющих массивов и получением имен столбцов для таблицы, я знаю, что моя строка работает, поскольку я использовал выведенную строку прямо как запрос SQL, проблема заключается в том, что кажется, что он не находит ни одной строки в таблица (которую я знаю, они используют If lrd.HasRows. Тогда я видел, что она не находит никаких строк (lrd.HasRows = False). Являются ли они отдельной строкой соединения для INFORMATION_SCHEMA.COLUMNS?

Находит название столбца

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

Находит значение столбца

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

Button Click (Создает управляющий массив)

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

2 ответа

Решение

Трудно сказать, не зная функцию SQLSELECT_WHERE, но возможно один или несколько параметров неверны. Попробуйте пропустить эту функцию и использовать

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

Вы также можете проверить количество строк, используя count(*) в запросе.

Я нашел решение! в коде все работало возникла проблема с массивом 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

TableNameParm.Direction должен быть входным, но для него установлено значение 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
Другие вопросы по тегам