请告知;这段代码有什么问题? 给出以下错误...列' 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
答案 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代码。