2011-08-05 2 views
0

안녕하세요 모든 스택 오버플로. 나는 여기에 약간의 딜레마를 가지고있다. 난 당신이 필드에 입력 할 수있는 문자의 최대를 얻기 위해 필요하지만 어떤 성공이 없었으며 구글은 당신이 할 수 여기에 액세스 열의 최대 필드 크기 얻기

지금 내 코드

  lvwDestination.Columns.Add("Fields in Database", 150, HorizontalAlignment.Left); 

      lvwDestination.Columns.Add("DataType", 100, HorizontalAlignment.Left); 

      lvwDestination.Columns.Add("Max", 100, HorizontalAlignment.Left); 

      for (int i = 0; i < DataTable.Columns.Count; i++) 
      { 

       _lvwItem = new ListViewItem(DataTable.Columns[i].ColumnName, 0); 

       _lvwItem.Name = DataTable.Columns[i].ColumnName; 

       _lvwItem.SubItems.Add(DataTable.Columns[i].DataType.Name.ToString()); 

       _lvwItem.SubItems.Add(DataTable.Columns[i].MaxLength.ToString()); 
       lvwDestination.Items.AddRange(new ListViewItem[] { _lvwItem }); 


      } 

입니다 필요 유사한 anyhing를 생성하지 않았다 시도한 것을보십시오

_lvwItem.SubItems.Add(DataTable.Columns[i].MaxLength.ToString()); 

그러나이 모든 것이 -1이라는 것은 모든 열에 대해 -1입니다. 나는 또한 필자의 컬럼이 실제로 속성 필드 크기 속성을 가지고 있는지 확인했다. .ColumnName 및 .DataType은 완벽하게 작동하지만 .MaxLength는 항상 -1을 생성합니다. 솔루션을 제안 할 수있는 사람이 있으면 미리 감사드립니다.

는 는
+0

수는 http://stackoverflow.com/q/958101/754438 – Reniuz

+0

사실은 전혀하지 않은 DUP를 복제 당신이 그 질문을 볼 수 있듯이 XML에서 채워집니다. 따라서 Access에서 채워져서 제 질문은 중복되지 않습니다. 또한이 질문은 내 문제에 대한 해결책을 제시하지 않습니다. – raz0r

답변

2

시도 설정 다음 등록 정보 : 당신의 DataAdapterOledbDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKeyFill 메서드를 호출하기 전에 ...

+0

답변 해 주셔서 감사합니다. 지금 사용해 보시고 다시 돌아 오실 것입니다. – raz0r

+0

그건 작동하지 않습니다. 필드 크기가 40 인 열에 대해서는 50을 반환하고, 필드 크기가 30 인 열에 대해서는 100을 반환하고, 다른 경우에는 100을 반환합니다. 필드 크기가 16 인 열에 15 개가 있지만 도움을 주셔서 감사합니다. 나는 MaxLength를 사용하고 있는데 내가 잘못하고있을 수도 있습니다. – raz0r

+0

'MissingSchemaAction.AddWithKey'가 나를 위해이 같은 문제를 해결했습니다. 감사. –

1

나는 SQL 데이터베이스 테이블에 대해 빠른 테스트를 실행했습니다 -는 최대 길이 속성이에서 검색되지 않는 것 같습니다 사용자가 특별히 설정하지 않는 한 데이터베이스와 항상 값이 설정 한 같이 -1 :

 string sql = "select top 10 * from [TestTable]"; 
     string connStr = ConfigurationManager.ConnectionStrings["DbConnString"].ConnectionString; 
     using (SqlConnection conn = new SqlConnection(connStr)) 
     { 
      SqlCommand cmd = new SqlCommand(sql, conn); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      DataTable data = new DataTable(); 
      da.Fill(data); 

      foreach (DataColumn col in data.Columns) 
      { 
       Console.WriteLine(
        string.Format("{0}\t{1}\t{2}", 
          col.ColumnName, 
          col.DataType.ToString(), 
          col.MaxLength 
         ) 
        ); 
      } 
      Console.ReadLine(); 
     } 

+0

다른 말로하면, 액세스 할 때 필드 크기 속성을 검색 할 수있는 방법이 전혀 없다는 것을 의미합니다. – raz0r

+0

가져 오기가 실패 할 때 Max 전체 길이를 읽을 수 없기 때문에이 질문에 대한 답변이 필요합니다. 너무 많은 문자가있는 경우 – raz0r

+0

전혀 문제가없는 DataType을 반환 할 수 있기 때문에 이것이 불가능하다고 생각하지 않습니다. – raz0r