2017-10-26 10 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; @ P516 @ 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文字列をhaved。 私はまた、Googleの検索し、このエラーは、実際には私が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個の列フィールドを使用すると、その制限を打つ可能性が高いです。

あなたは、テーブルを正常化、またはメモ型フィールドにいくつかの列を変換する必要があります。

関連する問題