C# 使用oledb导出excel,字段内容超长的解决方法
2013-05-28 16:26
806 查看
使用oledb导出excel时,如果某个字段内容长度超过255个字符,会报如下错误:
The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.
代码如下:
var connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test.xlsx;Extended Properties=\"Excel 12.0 XML;HDR=Yes;IMEX=0;CharacterSet=utf-8\";";
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
OleDbCommand com = new OleDbCommand();
com.Connection = conn;
com.CommandText = "CREATE TABLE [Report]([ID] Text,[Msg] Text)";
com.ExecuteNonQuery();
var msg = "a".PadRight(255,'b');com.CommandText = "INSERT INTO [Report$]([ID], [Msg]) VALUES(1,'"
+ msg
+ "')";
com.ExecuteNonQuery();
conn.Close();
如何解决这个问题呢?
1. 在excel 2007以前是可以直接定义 Memo 类型来解决这个问题的,当然2007以前使用的连接串是不一样的:
com.CommandText = "CREATE TABLE [Report]([Msg] Memo)";
2. 但是在excel 2007以后,这样就不可以了,但奇怪的是可以使用Alter来创建新列,新列可以识别出Memo类型!
创建表:
OleDbCommand com = new OleDbCommand();
com.Connection = conn;
com.CommandText = "CREATE TABLE [Report]([ID] Text)";
com.ExecuteNonQuery();
添加新列:
com.CommandText = "Alter Table [Report$] ADD [Msg] Memo";
com.ExecuteNonQuery();
然后插入数据:
var msg = "a".PadRight(255,'b');
com.CommandText = "INSERT INTO [Report$]([ID], [Msg]) VALUES(1,'"
+ msg
+ "')";
com.ExecuteNonQuery();
3. 还有种莫名其妙的方法:在创建表(Create)之后,Insert 的时候表名后不加 $
var msg = "a".PadRight(255,'b');
com.CommandText = "INSERT INTO [Report]([ID], [Msg]) VALUES(1,'"
+ msg
+ "')";
com.ExecuteNonQuery();
问题貌似解决了,但貌似而已,还是有问题的。
以上的Create和Insert是在同一次操作中,如果第一次创建了一个excel,但插入的数据中,长度没有超过255字符的,那么在下一次Insert时,
恭喜你:此问题又来了!
怎么办呢?
请看终极解决办法:
在Create后,第一次Insert时,如果列[Msg]长度小于255,后边补空格使其长度超过255.
var msg = "a".PadRight(256,' ');
com.CommandText = "INSERT INTO [Report$]([ID], [Msg]) VALUES(1,'"
+ msg
+ "')";
com.ExecuteNonQuery();
The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.
代码如下:
var connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test.xlsx;Extended Properties=\"Excel 12.0 XML;HDR=Yes;IMEX=0;CharacterSet=utf-8\";";
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
OleDbCommand com = new OleDbCommand();
com.Connection = conn;
com.CommandText = "CREATE TABLE [Report]([ID] Text,[Msg] Text)";
com.ExecuteNonQuery();
var msg = "a".PadRight(255,'b');com.CommandText = "INSERT INTO [Report$]([ID], [Msg]) VALUES(1,'"
+ msg
+ "')";
com.ExecuteNonQuery();
conn.Close();
如何解决这个问题呢?
1. 在excel 2007以前是可以直接定义 Memo 类型来解决这个问题的,当然2007以前使用的连接串是不一样的:
com.CommandText = "CREATE TABLE [Report]([Msg] Memo)";
2. 但是在excel 2007以后,这样就不可以了,但奇怪的是可以使用Alter来创建新列,新列可以识别出Memo类型!
创建表:
OleDbCommand com = new OleDbCommand();
com.Connection = conn;
com.CommandText = "CREATE TABLE [Report]([ID] Text)";
com.ExecuteNonQuery();
添加新列:
com.CommandText = "Alter Table [Report$] ADD [Msg] Memo";
com.ExecuteNonQuery();
然后插入数据:
var msg = "a".PadRight(255,'b');
com.CommandText = "INSERT INTO [Report$]([ID], [Msg]) VALUES(1,'"
+ msg
+ "')";
com.ExecuteNonQuery();
3. 还有种莫名其妙的方法:在创建表(Create)之后,Insert 的时候表名后不加 $
var msg = "a".PadRight(255,'b');
com.CommandText = "INSERT INTO [Report]([ID], [Msg]) VALUES(1,'"
+ msg
+ "')";
com.ExecuteNonQuery();
问题貌似解决了,但貌似而已,还是有问题的。
以上的Create和Insert是在同一次操作中,如果第一次创建了一个excel,但插入的数据中,长度没有超过255字符的,那么在下一次Insert时,
恭喜你:此问题又来了!
怎么办呢?
请看终极解决办法:
在Create后,第一次Insert时,如果列[Msg]长度小于255,后边补空格使其长度超过255.
var msg = "a".PadRight(256,' ');
com.CommandText = "INSERT INTO [Report$]([ID], [Msg]) VALUES(1,'"
+ msg
+ "')";
com.ExecuteNonQuery();
相关文章推荐
- C#导出Excel,某单元格内容长度超过255 的解决方法
- C#使用oledb导出数据到excel的方法
- C#导出EXCEL超大数据源码,解决内存溢出问题,使用OLEDB方式(NPOI做不到)
- C# GridView导出excel,字段值前边带0的,导出后不显示0的解决方法
- C#导出Excel,某单元格内容长度超过255 的解决方法
- C#使用oledb连接excel运行Insert Into语句出现“操作必须使用一个可更新的查询”的解决的方法
- C# 导出excel单个单元格内容超出当前范围解决方法
- C#导出EXCEL没有网格线的解决方法
- C#导出数据到CSV和EXCEL文件,过长的数值被转义的解决方法(3)
- C#导出EXCEL没有网格线的解决方法介绍
- C#使用RenderControl将GridView控件导出到EXCEL的方法
- C# 用数据库读取Excel出现“定义了过多字段”错误的解决方法
- 使用oledb导出excel的varchar字段出错
- [ASP.NET-C#]将DataSet、DataTable中的数据导出为Excel的解决方法
- C#导出数据到CSV和EXCEL文件,过长的数值被转义的解决方法
- 如何解决C#导出excel异常来自 HRESULT:0x800A03EC的方法
- C#使用oledb连接excel执行Insert Into语句出现“操作必须使用一个可更新的查询”的解决办法
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
- C# 导出Word报”无法打开Office open xml文件。因为文件内容有错误“ 解决方法
- GridView导出Excel使用UpdatePanel导致“无法分析从服务器收到的消息”解决方法.