2011-12-28 12 views
4

Excelにデータをエクスポートしようとしています。私はOLEDB 12を使用しています。connectio文字列は次のようになります。c#文字列データが255文字を超えるときにExcelに挿入するときのエラー

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES;'" 

そして私はINSERTクエリを使用します。しかし、ターゲット列のデータが255文字を超えるたびに、例外が発生します。

Exception Details: System.Data.OleDb.OleDbException: The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data. 

ありSO上で同様のポストです:Excel unable to insert more than 255 chars?が、それは、C#にはない、

私もhttp://support.microsoft.com/kb/213841と呼ばれ、すべてのソリューションを得ていません。

助けてください。

答えて

0

:私は十分な応答を蓄積し、問題を解決することができませんでしたができるので

は、私は、Excelオブジェクト(Officeの相互運用機能)に切り替えないと何も問題は今はありません。

1

私は当初、データを書き込む前にセルのデータタイプ(メモ/テキスト)を定義できるかもしれないと考えていましたが、これはこの記事では表示されませんhttp://support.microsoft.com/kb/278973

私があなたに提供できる "最高の"解決策は、データを255文字に切り詰めて、それをエクセルファイルに挿入してnieghbouring列に挿入することです。そこからいくつかのinteropを使って一緒につなぎ合わせることができます。私はついにやった

0

それがっ

public static void DataSetsToExcel(DataSet dataSet, string filepath) 
    { 
     try 
     { 
      string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=Excel 12.0 Xml;"; 
      string tablename = ""; 
      DataTable dt = new DataTable(); 
      foreach (System.Data.DataTable dataTable in dataSet.Tables) 
      { 
       dt = dataTable; 
       tablename = dataTable.TableName; 
       using (OleDbConnection con = new OleDbConnection(connString)) 
       { 
        con.Open(); 
        StringBuilder strSQL = new StringBuilder(); 
        strSQL.Append("CREATE TABLE ").Append("[" + tablename + "]"); 
        strSQL.Append("("); 
        for (int i = 0; i < dt.Columns.Count; i++) 
        { 
         strSQL.Append("[" + dt.Columns[i].ColumnName + "] text,"); 
        } 
        strSQL = strSQL.Remove(strSQL.Length - 1, 1); 
        strSQL.Append(")"); 

        OleDbCommand cmd = new OleDbCommand(strSQL.ToString(), con); 
        cmd.ExecuteNonQuery(); 

        for (int i = 0; i < dt.Rows.Count; i++) 
        { 
         strSQL.Clear(); 
         StringBuilder strfield = new StringBuilder(); 
         StringBuilder strvalue = new StringBuilder(); 
         for (int j = 0; j < dt.Columns.Count; j++) 
         { 
          strfield.Append("[" + dt.Columns[j].ColumnName + "]"); 
          strvalue.Append("'" + dt.Rows[i][j].ToString().Replace("'", "''") + "'"); 
          if (j != dt.Columns.Count - 1) 
          { 
           strfield.Append(","); 
           strvalue.Append(","); 
          } 
          else 
          { 
          } 
         } 
         if (strvalue.ToString().Contains("<br/>")) 
         { 
          strvalue = strvalue.Replace("<br/>", Environment.NewLine); 
         } 
         cmd.CommandText = strSQL.Append(" insert into [" + tablename + "](") 
          .Append(strfield.ToString()) 
          .Append(") values (").Append(strvalue).Append(")").ToString(); 
         cmd.ExecuteNonQuery(); 
        } 
        con.Close(); 
       } 
      } 
     } 
     catch (Exception ex) 
     {     
     } 
    } 
を助けるかもしれない、このコードを使用してみてください
関連する問題