2010-08-27 92 views
0

我想用它是從MySQL數據庫MYSQL獲得的數據Db.This獲得OLEDB DataAdapter的包含非常長文,其數據類型MYSQL中已被定義爲插入一些數據到Excel工作表(Varchar(1023),Text,Longtext等)。當我嘗試將這些傳遞給oledb Dataadapter時,我嘗試使用大小爲5000的oledb.VarWChar,oledb.LongVarWChar等等。但是,當我嘗試使用以下異常運行da.update(...)命令。問題使用OLEDB數據類型將數據寫入到Excel工作表

領域是太小,無法接受數據的你試圖添加量。嘗試插入或粘貼更少的數據

我無法理解哪些數據類型應使用oledb來映射到這些長文本值。

可能有人請幫助我?

謝謝。

回答

0

我做類似的東西,衝進與來自SQL Server的VARCHAR(max)數據類型相同的錯誤。數據來自哪裏並不重要。從數據庫獲取數據時,需要爲列數據類型和大小定義模式。我通過調用FillSchema的數據適配器上做到這一點,我使用 -

DataTable dt = new DataTable(); 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
da.Fill(dt); 
da.FillSchema(dt, SchemaType.Source); 
return dt; 

你也可以單獨設置列屬性,如果你想。

然後我遍歷我的DataTable,並建立了我的列每列出口使用ADOX.NET OLEDB。您不必使用ADOX.NET,這裏的主要概念是使用來自原始數據庫的大小。

foreach (DataColumn col in dt.Columns) 
    { 
     columnList.Append(dt.TableName + "." + col.ColumnName + ", "); 
     ADOX.Column adoxCol = new Column(); 
     adoxCol.ParentCatalog = cat; 
     adoxCol.Name = col.ColumnName; 
     adoxCol.Type = TranslateType(col.DataType, col.MaxLength); 
     int size = col.MaxLength > 0 ? col.MaxLength : 0; 
     if (col.AllowDBNull) 
     { 
      adoxCol.Attributes = ColumnAttributesEnum.adColNullable; 
     } 
     adoxTable.Columns.Append(adoxCol, adoxCol.Type, size); 
    } 

這是我的TranslateType方法的代碼片斷,它決定了是否使用LongVarWChar或VarWChar。這些數據類型是oleDB數據類型的ADOX.NET版本。我相信任何超過4000個字符都應該使用LongVarWChar類型,但我不確定這一點。你沒有提及哪個版本的Excel是你的目標,但我這個用Excel 2003工作都和Excel 2007

case "System.String": 
     if (maxLength > 4000) 
     { 
      return DataTypeEnum.adLongVarWChar; 
     } 
     return DataTypeEnum.adVarWChar; 

的LongVarWChar可以採用大尺寸,可器。--- 2 GB。所以不要擔心尺寸太大。