2017-04-07 18 views
0

; 이 코드에서 무엇이 잘못 되었습니까? 아래 오류를주는 중 ... 'xxxx'열이 기본 테이블 ''에 속해 있지 않습니다.'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

_view.ToTable_의 두 번째 매개 변수는 DataTable의 기존 열 이름이어야합니다. _tablex_ _tablex_에 해당 이름의 열이 있습니까? – Steve

+0

예이 이름이 "xxxx"인 테이블이 포함 된 열 – BATT

+0

죄송합니다. 다른 설명이 없습니다. TableX는 시스템 정의 _sp_column_ 저장 프로 시저를 사용하여 채 웁니다. 이 저장 프로시 저는 'xxxxx'라는 필드가없는 데이터 테이블을 생성합니다. 사용하려고하는 열의 실제 이름은 무엇입니까? – Steve

답변

0

시스템 정의 프로 시저 sp_columns 각 행은 tbl_EmpRecords의 열 스키마 정보를 포함하는 경우에는 데이터 테이블을 생성한다.

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 참조 :
이것은이 TABLEX에 존재하는 열이 다음 것을 의미한다.

따라서 XXXXXX이라는 열이 없으며 이것이 오류의 의미입니다. 하나의 열만있는 새로운 데이터 테이블을 실제로 만들고 싶다면 XXXXX 필드는 위의 이름 중 하나 여야합니다. 당신이 (... IE, empName, HIREDATE 등) 해당 테이블에 정의 된 필드의 tbl_EmpRecords 사용하여 사람을 정렬하려는 경우

' 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") 

대신에, 당신은에 대한 다른 접근 방법을 사용할 필요가 당신의 질문.

.... 
    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 코드를 계속 진행할 수 있습니다.
그러나, 관심있는 데이터 만 검색하기 위해 데이터베이스를 조회하는 것이 좋습니다.
그래서, 당신은 그럼 그냥 쿼리를

select XXXXX from tbl_EmpRecords 

를 사용하는 경우에만 필드 XXXXX이 필요하고 아마 당신이 요청할 수있는 경우 데이터베이스를 사용하여 해당 레코드를 정렬하십시오.

select XXXXX from tbl_EmpRecords ORDER BY XXXXX 

모든 DataView 코드가 제거됩니다.

+0

귀하의 기여에 감사드립니다 만 목표는 열 이름을 추출하는 것입니다. – BATT

+0

테이블의 모든 열 이름을 추출하는 방법을 더 잘 설명하는 예제가 추가되었습니다. _tbl_EmpRecords_ – Steve

+0

감사합니다. _sp_columns_에 관한 요점을 가지고 있습니다. * _sp_coulmns_ 결과로 _dt_를 채워서 시작했습니다. * 그런 다음 데이터보기를 사용하여 'COLUMN_NAME'열을 선택하십시오. 결과였다 'COLUMN_NAME은 transactionId는 TransactionDate TransactionAddedBy PerformanceID 은 loginid VendorID 값 GROUPID GradeID' 하지만 여전히 나는 CBL에 할당 할 필요가있는 2 열 (VendorID 값 및 GradeID)를 추출하는 방법을 찾지 못했습니다 만 사용 _dt.Select_ – BATT