我发作毛病时的环境:Windows 7,Framework 4、0,Microsoft Office 2007,VS2010,c# WinForm;
部份代码:
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False; " + "data source=" + @excelPath + ";Extended Properties='Excel 12.0; HDR=yes; IMEX=2'"; OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = strConn; try { OleDbCommand cmd = null; try { cmd = new OleDbCommand("Insert Into [Sheet1$] Values('abc', 'bac', '0', '123456', 'test','测试','aa')", conn);//(A,B,C,D,E,F,G) cmd.ExecuteNonQuery(); } catch (System.Exception ex) { textBox1.Text += ("插进去数据失利:" + ex.Message); textBox1.Text += ("\r\n"); }
遇到此毛病的时刻第一想到的就是没有权限,但运用管理员身份运转依然是雷同的毛病!
又经由过程以下代码增加权限,照样一样的毛病:
FileInfo fi = new FileInfo(excelPath); System.Security.AccessControl.FileSecurity fileSecurity = fi.GetAccessControl(); fileSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow)); fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow)); fi.SetAccessControl(fileSecurity); DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(excelPath)); System.Security.AccessControl.DirectorySecurity dirSecurity = di.GetAccessControl(); dirSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow)); dirSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow)); di.SetAccessControl(dirSecurity);
学问补习,这里的衔接字符串多了:Extended Properties='Excel 12.0; HDR=yes; IMEX=2'
参数HDR的值:
HDR=Yes,这代表第一行是题目,不做为数据运用 ,假如用HDR=NO,则示意第一行不是题目,做为数据来运用。体系默许的是YES
参数Excel 8.0 关于Excel 97以上到2003版本都用Excel 8.0,2007或2010的都用Extended Properties=Excel 12.0
IMEX ( IMport EXport mode )设置
IMEX 有三种形式:
0 is Export mode
1 is Import mode
2 is Linked mode (full update capabilities)
我这里特别要申明的就是 IMEX 参数了,由于差别的形式代表著差别的读写行动:
当 IMEX=0 时为“汇出形式”,这个形式开启的 Excel 档案只能用来做“写入”用处。
当 IMEX=1 时为“汇入形式”,这个形式开启的 Excel 档案只能用来做“读取”用处。
当 IMEX=2 时为“连結形式”,这个形式开启的 Excel 档案可同时增援“读取”与“写入”用处。
意义以下:
0 ---输出形式;
1---输入形式;
2----链接形式(完整更新才能)
根据以上形貌,上面的衔接字符串应该是能够读取,插件纪录的
然则现实并非如此,当实行Insert Into语句时却涌现异常:“操纵必需运用一个可更新的查询”!
注重是c# WinForm顺序,不是Web应用顺序;假如是Web应用顺序,那须要增加IIS_IUSRS或IIS_Service用户的目次接见权限;
照样去搜刮看看他人是怎样处理的吧,然则看遍了他人处理题目的要领,到我这里就是测试不经由过程!
猜想照样IMEX值的题目,改成1不可,那就改成0,尼马,奇观涌现了!
接着又测试将IMEX设置为4或10,效果都没题目,惟独1和2不可,真是坑爹的节拍啊。
以上就是C#运用oledb衔接excel实行Insert Into语句涌现“必需运用一个可更新的查询”的处理办法的示例代码的细致内容,更多请关注ki4网别的相干文章!