时间:2021-07-01 10:21:17 帮助过:33人阅读
Connection.Open();
/* 特别说明,如果没有这一句,连接处于关闭状态,执行sql语句会提示错误:连接关闭不可用。我用一天的时间才研究出来
这个貌似 MSDN 和 网上都没有相关资料和说明,我一直奇怪,建立连接都没任何错误,datatable.fill()都没问题,为何执行sql语句连接处于关闭不可用呢?
大部分情况大量数据回写导出到EXCEL表格,都会是SQL数据库,可以用 SqlBulkCopy ,只是我的数据库却是 SqlCe,不支持SqlBulkCopy
所以,只能自己做线程执行插入语句。
貌似在 C++ 中,建立连接后,从来没有自己手动去Open,,,,,,,,,,,,,
//*/
}
catch (OleDbException ex )
{
}
3,执行sql语句:
try
{
OleDbCommand comm = new OleDbCommand(sqlstr, Connection);
result = comm.ExecuteNonQuery(); //返回受影响的数据行数量。
}
catch (OleDbException e)
{
}
4,excel表格sql语句书写
string sqlstr="select F1,F2 from [Sheet1$] ";//注意表名称[] 和 $ 都不能少了。
5,读取的时候,部分数据丢失,或者错误。
excel默认扫描前8行数据,以便自动识别字段数据类型,故,后面如果字段类型不符合,或者字段超长度,就会出现丢失。
1,IMEX=1 连接的时候设为读取模式,将数字和字符始终做字符处理。
2,修改注册表,将行数改更大 0 - 16;0代表整个表格。
TypeGuessRows 设置为 0,,注意表格如果较大,10000行,改成0,则需要考虑性能和效率问题。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]
Windows 7 的注册表项目
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel
3,修改注册表脚本
@echo off reg add HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel /v TypeGuessRows /t REG_DWORD /d 0 /f
@echo off reg add "HKLM\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel" /v TypeGuessRows /t REG_DWORD /d 0 /f
@echo off reg add "HKLM\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel" /v TypeGuessRows /t REG_DWORD /d 0 /f
C#通过OleDb读写excel表格几个要点
标签:c# excel oledb