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

论坛 期权论坛 脚本     
匿名技术用户   2021-1-3 15:48   25   0

使用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 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP