2014-03-18 5 views
2

어떤 이유로 인해 MS Access 테이블의 디자인보기를 열 수 없습니다. 나는 데이터을 볼 수는 있지만, 특히 열의 길이는 아닙니다. 이 코드 말했다 테이블에 레코드를 삽입하려고하면열 길이를 초과하여 프로그래밍 방식으로 (OLEDB)를 결정할 수 있습니까?

가 :

using (var conn = new OleDbConnection(connStr)) 
{ 
    using (var cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = 
      @"INSERT INTO tx_header (tx, site_no, xmlfile, collect_dttm, ccr_user, tx_memo, file_beg, file_end) 
       VALUES(@txval, @siteNum, @xmlfileName, Now(), @ccrUser, @TXMemo, @strfile_beg, @strfile_end)"; 
     cmd.CommandType = CommandType.Text; 
     cmd.Parameters.AddWithValue("@txval", tx); 
     cmd.Parameters.AddWithValue("@siteNum", site_no); 
     cmd.Parameters.AddWithValue("@xmlfileName", xmlfile); 
     cmd.Parameters.AddWithValue("@ccrUser", ccr_user); 
     cmd.Parameters.AddWithValue("@TXMemo", tx_memo); 
     cmd.Parameters.AddWithValue("@strfile_beg", file_beg); 
     cmd.Parameters.AddWithValue("@strfile_end", file_end); 
     conn.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
} 

... 내가 얻을, "System.Data.OleDb.OleDbException 사용자 코드에 의해 처리되지 않은했다 HRESULT = -2147217833 메시지 = 필드는 추가하려는 데이터 양을 받아 너무 작습니다. 적은 데이터를 삽입하거나 붙여보십시오. 출처 = Microsoft Office Access 데이터베이스 엔진 "

보다는 열이 너무 많이 가지고있는 생각해야 데이터, b e 열이 문제가있는 열을 프로그래밍 방식으로 결정할 수 있다면 좋습니다. 그럴 수있어? 방법?

+1

표준 ADO.NET 경로를 통해 스키마 정보를 조사한 적이 있습니까? IDataReader.GetSchemaTable 메소드와 마찬가지로? – Crono

+0

나는 또한 질문해야한다 : 왜 당신은 동적으로 데이터베이스 스펙을 가져와야 하는가? 처음부터 데이터베이스 필드 유형, 길이 및 제약 조건을 알고 있다면 코드가 훨씬 강력 해집니다! : p – Crono

+0

@Crono : 당신 말이 맞아요. 그러나 언급 한 바와 같이 Access로 MDB 파일을 열면 디자인보기를 볼 수 없습니다. 나는 이유를 모른다. –

답변

1

Retrieving Database Schema Information에서 시작하는 MSDN의 기본 스키마 정보를 쿼리하는 방법에 대한 자세한 설명이 있습니다.

면책 조항 : 나는 결코 Access 데이터베이스에 대해 사용하려하지 않았습니다.

+0

고마워요. 나는 그것을 시도하면서 나는 강장제 물을 마실 것이다. –

1

위의 의견을 읽은 후에는 Access 파일에 디자이너보기가 잠겨 있다는 것이 분명해 보입니다. 일반적으로 Shift를 누른 상태에서 파일을 두 번 클릭하고 Access가 실행될 때까지 Shift 키를 누른 채로 잠금을 해제 할 수 있어야합니다.

그 다음부터는 테이블, 쿼리 및 기타 데이터베이스 사양에 액세스 할 수 있습니다. 그것은 동적으로 액세스하려는 것보다 훨씬 낫습니다.

+0

고마워요. (XP 모드를 통한 액세스와 달리 파일 이름을 마우스 오른쪽 단추로 클릭하고 액세스를 선택해야만하는 이유가 있지만). 그래서 내 문제를 해결했지만 토닉 워터 (Tonic Water)가 실제 질문에 대답 한대로 ... –

+1

에드먼드 *는 실제 질문에 대답했고 따라서 점수를받을 자격이 있습니다. 그럼에도 불구하고 여기서 올바른 호출은 db 세부 정보를 동적으로 가져 오지 않고, 잘 알려지지 않은 사양에 따라 코드에 유효성 검사 규칙을 적용해야합니다. ;) – Crono