专栏' xxxx'不属于底层表格''错误

时间:2017-04-07 21:24:23

标签: sql-server vb.net ado.net dataview

请告知;这段代码有什么问题? 给出以下错误...列' xxxx'不属于基础表''。

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Dim connStr As String = ConfigurationManager.ConnectionStrings("FBB-DSL-DBConnectionString").ConnectionString
        Dim tablex As New DataTable()

        Using conn As New SqlConnection(connStr)
            Using cmd As New SqlCommand("sp_columns", conn)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.AddWithValue("@table_name", "tbl_EmpRecords")

                ' get the adapter object and attach the command object to it
                Using ad As New SqlDataAdapter(cmd)
                    ' fire Fill method to fetch the data and fill into DataTable
                    ad.Fill(tablex)
                End Using

            End Using
        End Using

        'Creating DataView
        Dim view As New DataView(tablex)
        Dim dt As DataTable = view.ToTable(False, "COLUMN_NAME" )

        CheckBoxList1.DataSource = dt
        CheckBoxList1.DataBind()
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

系统定义存储过程 sp_columns 会生成一个数据表,其中每一行都包含 tbl_EmpRecords 中列的架构详细信息。
这意味着此 tablex 中显示的列如下:

TABLE_QUALIFIER, 
TABLE_OWNER,     
TABLE_NAME,      
COLUMN_NAME,     
DATA_TYPE,       
TYPE_NAME,       
PRECISION,       
LENGTH,          
SCALE,           
RADIX, 
NULLABLE, 
SQL_DATA_TYPE, 
SQL_DATETIME_SUB, 
CHAR_OCTET_LENGTH, 
ORDINAL_POSITION, 
IS_NULLABLE, 
SS_DATA_TYPE

有关每列的含义,请参阅MSDN docs about sp_columns

因此,没有名为 XXXXXX 的列,这正是错误告诉您的内容。如果您真的想要创建一个只有一列的新数据表,那么您的XXXXX字段应该是上述名称之一。

' This will return a new table with only one column named COLUMN_NAME'
' The table will contain all the column names of the table tbl_EmpRecords'
Dim dt As DataTable = view.ToTable(False, "COLUMN_NAME")

相反,如果您尝试使用该表中定义的字段(IE,empName,HireDate等......)对 tbl_EmpRecords 进行排序,那么您必须使用不同的方法您的查询。

   ....
   Using conn As New SqlConnection(connStr)
        Using cmd As New SqlCommand("select * from tbl_EmpRecords", conn)
            Using ad As New SqlDataAdapter(cmd)
                ad.Fill(tablex)
            End Using
        End Using
    End Using
    ....

然后您可以继续使用DataView代码 但是,查询数据库以仅检索您感兴趣的数据总是更好 因此,如果您只需要字段XXXXX,那么只需使用查询

   select XXXXX from tbl_EmpRecords

并且您可以要求数据库使用

为您排序该记录
   select XXXXX from tbl_EmpRecords ORDER BY XXXXX

删除所有DataView代码。