我需要访问Excel电子表格并将电子表格中的数据插入SQL数据库.但是主键是混合的,大多数是数字的,有些是字母数字.
我遇到的问题是,当数字和字母数字键在同一个电子表格中时,字母数字单元格返回空白值,而所有其他单元格返回其数据没有问题.
我正在使用OleDb方法来访问Excel文件.使用Command字符串检索数据后,我将数据放入DataAdapter,然后填充DataSet.我遍历DataSet中第一个DataTable中的所有行(dr).
我使用dr ["..."]引用列.ToString()
如果我在Visual Studio 2008中调试项目并查看"扩展属性",将鼠标悬停在"dr"上我可以查看DataRow的值,但应该是字母数字的主键是{}.其他值用引号括起来,但空白值有大括号.
这是C#问题还是Excel问题?
有没有人曾经遇到过这个问题,或者可能找到了解决方法/修复方法?
提前致谢.
解:
连接字符串:
Provider = Microsoft.Jet.OLEDB.4.0; Data Source = FilePath; Extended Properties ="Excel 8.0; HDR = Yes; IMEX = 1";
HDR=Yes;
表示第一行包含列名,而不是数据.HDR=No;
表明相反.
IMEX=1;
告诉驱动程序始终将"混合"(数字,日期,字符串等)数据列读作文本.请注意,此选项可能会影响Excel工作表写入访问权限.
SQL语法SELECT * FROM [sheet1$]
.即excel工作表名称后跟a $
并用[
]
括号括起来.
重要:
查看位于注册表REG_DWORD"TypeGuessRows"的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel].这是不让Excel仅使用前8行来猜测列数据类型的关键.将此值设置为0可扫描所有行.这可能会影响性能.
如果Excel工作簿受密码保护,则无法打开它以进行数据访问,即使通过连接字符串提供正确的密码也是如此.如果您尝试,您收到以下错误消息:"无法解密文件."