2017-02-27 7 views
0

私は大きなExcel文書を持っていましたので、OleDbconnecitonを使用して開いて編集しました。それを開いても問題ありません。私はちょうどSQLのような選択コマンドを使用しますが、一部の列からデータを変更しようとすると、エラー - >データ型の不一致が条件式に表示されます。更新列生成のサンプルです :エクスポートでoledbのExcelファイルからデータを更新できませんでしたC#

this._updateCommand = string.Format("UPDATE [{0}${1}{2}:{1}{2}] SET F{3} = ?", workSheet, ((DATA_COL)this._cellIndex).ToString(), this._rowIndex, "1"); 

それを取得:

"UDPATE [worksheet$B1:B1] SET F1 = ?" 

NEXTSTEP:

だから、
  Task task = Task.Run(() => {String connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; Mode=ReadWrite; Data Source={0}; Extended Properties='Excel 8.0; HDR=NO; IMEX=3;'", this.WorkBook); 
      for (int i = 0; i < this.editCollection.Count; i++) 
      { 
       OleDbConnection connection = new OleDbConnection(connectionString); 
       try 
       {       
        OleDbCommand command = new OleDbCommand(editCollection[i]._updateCommand, connection); 
        command.Parameters.AddWithValue("@thisData", editCollection[i]._value); 
        command.CommandType = CommandType.Text; 
        connection.Open(); 
        command.ExecuteNonQuery();       
       }          
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.Message); 
       } 
       finally 
       { 
        connection.Close(); 
        connection.Dispose(); 
       } 
      } 
      editCollection.Clear(); 
     }); 

、私が間違っていた何を?

+0

Hey Vadim、あなたの投稿コードは大丈夫です。問題は無効なデータ型のようです。これを理解するには、あなたの更新コマンドを見るのがいいでしょう。 Excelで処理できない値を渡そうとしたり、他の形式が定義されているExcel-Cellに渡したりしようとします。 – Sebi

+0

Hey Sebi。たぶん私は間違った接続文字列を使用しましたか?ロールに応じて、接続文字列でIMEXパラメータを使用すると、任意のタイプのデータを文字列データ型に表すことができます。 –

答えて

0

IMEXを2または0に変更してください。これまでのところ、私はIMEX=3という言葉がドキュメントに表示されていませんでした。それは何か新しいか、またはあなたはタイプミスがありますか?ここでMS docがIMEX値についてこう言われる、

0はエクスポートモードです - 書き込みする/挿入-にExcelが
1ファイルに使用すると、インポートモードである -
2がリンクされているExcelファイルから読み込みを行うために使用しますモード(完全な更新機能)

書き込みのためのIMEX設定の詳細については、https://stackoverflow.com/a/42413128/5857386を参照してください。

HTH

関連する問題