c# System.Data.OleDb.OleDbException (0x80004005): Cannot expand named range

使用OleDb读写Excel时,遇到如下异常信息:

System.Data.OleDb.OleDbException (0x80004005): Cannot expand named range 

代码:

var connStr = string.Format("provider = microsoft.ace.oledb.12.0;data source={0};Extended Properties='Excel 12.0;HDR=No;IMEX=1'", path);
var conn = new OleDbConnection(connStr);

var createSql = "CREATE TABLE [TableName] ([Title],[Content])";
using (OleDbCommand com = new OleDbCommand(createSql, conn))
{        
    com.ExecuteNonQuery();
}

var insertSql = "INSERT INTO [TableName] ([Title],[Content]) VALUES ('title','content')";
using (OleDbCommand com = new OleDbCommand(insertSql, conn))
{ 
    com.ExecuteNonQuery();
} 

 

如果你对同一个sheet进行了一次Insert操作,这样使用完全没有问题,但是当你第二次调用Insert时,恭喜你,报错了!Cannot expand named range!

出错的原因在于你的insert语句,

var insertSql = "INSERT INTO [TableName] ([Title],[Content]) VALUES ('title','content')";


 这个语句怎么了?第一次插入的时候不是好好的! 经过漫长的查询和调试后发现,insert语句你要这么写:

var insertSql = "INSERT INTO [TableName$] ([Title],[Content]) VALUES ('title','content')";


看到区别了吗?区别就在于 “$”,就这一刀啊,折磨了我多少个日日夜夜! 还有一点需要注意:Create的时候是千万不能加这个“$"的!

搞清这个问题后,不禁对微软兄表示不满:这一刀到底是加还是不加啊,Insert时要加的话,我第一次Insert为啥又不需要加呢?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值