代码:
insert into students
select * from
openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;hdr=yes;database=D:\Document\Visual Studio 2017\C#面向对象程序设计\C#程序设计与实践\学生信息管理系统\Student\Excel\学生信息1.xlsx',[学生信息$]);
表格数据
错误信息:
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "至少一个参数没有被指定值。".
Msg 7320, Level 16, State 2, Line 39
Cannot execute the query "SELECT `Tbl1004`.`No` AS `Col1020`,`Tbl1004`.`Name` AS `Col1021`,`Tbl1004`.`Sex` AS `Col1022`,`Tbl1004`.` Classname` AS `Col1023`,`Tbl1004`.`Tel` AS `Col1024`,`Tbl1004`.`Memo` AS `Col1018` FROM `学生信息$` `Tbl1004`" against OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
问题分析与解决:错误显示至少有一个参数没有被指定值,但是同样的查询语句在https://mp.csdn.net/postedit/91536523这个例子中正确执行了,说明是数据的问题,查看数据表格后发现字段名Classname前面多了一个空格,去掉空格后问题解决
总结:查询语句select后面的字段名的第一个字符不为空格,至少有一个参数没有被指定值问题的原因在于查询语句中select的字段与数据源里面的字段不匹配,在这个例子中,select * from...中的*代表表中的所有字段名,展开就相当于
select No,Name,Sex,[ Classname],Tel,Memo from
openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;hdr=yes;database=D:\Document\Visual Studio 2017\C#面向对象程序设计\C#程序设计与实践\学生信息管理系统\Student\Excel\学生信息1.xlsx',[学生信息$]);
而这样就相当于字段[ Classname]的第一个字符为空格,从而导致错误