2017-10-26 7 views
-1

내 액세스 데이터베이스 파일 (.mdb)의 각 테이블에서 2 열을 업데이트하는 C# 프로그램이 있습니다. updatnig 인 열은 짧은 문자열 유형이며 업데이트하기 전에 크기를 255로 변경합니다. 나는 15 개의 파일을 가지고 있고, 나의 코드는 처음 7 dbs에서 작동하고, 8 번째 파일에서 충돌한다. 별도로 각 코드를 업데이트 중이며 데이터베이스 중간에 충돌합니다.C# -sql 업데이트 코드. 액세스 데이터베이스에 열이 너무 많습니다.

System.Data.OleDb.OleDbException : '레코드가 너무 큽니다.' 충돌되는

쿼리 문자열 :... UPDATE CARTE SET SYMBOLE = 'AGLX19.A8E', SYMBOLE2 = 'AWLX19.A8E; @ ~ P5-16 @ PQ; @ P517 @ PQ; @ P518 @ PQ; @ P519. @PQ 'WHERE CODE ='2862411 ';

private void UpdateSYMBOLEinDatabase(string tableName, string code) 
    { 

     if (symboleMdb[0] == "") 
      return; 

     string queryString = "UPDATE " + tableName + 
          " SET SYMBOLE = '" + symboleMdb[0] + "', SYMBOLE2 = '" + symboleMdb[1] + "' " + 
          "WHERE CODE = '" + code + "';"; 

     if (symboleMdb[1] == "") 
      queryString = queryString.Replace(", SYMBOLE2 = ''", ""); 

     using (OleDbConnection connectionInput = new OleDbConnection(connectionStringInput)) 
     using (OleDbCommand command = new OleDbCommand(queryString, connectionInput)) 
     { 
      connectionInput.Open(); 
      command.ExecuteNonQuery(); 
      command.Dispose(); 
     } 
    } 

나는 (온라인 검사기에) 신중 SQL 문자열을 확인 비하. 나는 또한 Google의 검색을했고이 오류가 실제로 db 파일을 열 때 내 db에 너무 많은 열과 연결되어 있다는 것을 발견했습니다. 약 220 열이 있습니다. 그러나 열을 프로그래밍 방식으로 계산할 때 약 878 개의 열 (짧은 열 유형의 열 길이를 변경하기 전후)이 있음을 보여줍니다. 다른 테이블의 경우 정확한 개수를 보여줍니다.

테이블을 복사하면 도움이 될 수 있습니다. 그러나 실제로 나는 또한 그것을 할 수 없다.

private void CopyDeleteCopyDeleteQuery(string tableName) 
    { 
     string queryString = "CREATE TABLE " + tableName + "O"+ 
          " AS (SELECT * FROM " + tableName + 
          " WHERE CODE='0801733');"; 
     using (OleDbConnection connectionInput = new OleDbConnection(connectionStringInput)) 
     using (OleDbCommand command = new OleDbCommand(queryString, connectionInput)) 
     { 
      connectionInput.Open();     
      command.ExecuteNonQuery(); 
      command.Dispose(); 
     } 
    } 

System.Data.OleDb.OleDbException : '구문 오류는 CREATE TABLE 문을.'

쿼리 문자열 : CREATE TABLE CARTEO AS (SELECT * FROM CARTE WHERE CODE = '0801733');

+1

테이블을 복사하는 구문이 잘못되어 MS Access가 CREATE TABLE AS SELECT 대신 테이블에 쿼리를 복사하기 위해 SELECT ... INTO를 사용합니다. –

답변

0

분야에 대한 제한이를 2kB (제외 메모와 OLE입니다. ~ 220 열 필드를 사용하면 그 한계 타격이 될 가능성이 높다.

당신은 테이블을 정상화 또는 메모 필드에 일부 열을 변환해야합니다