ホームページ >バックエンド開発 >C#.Net チュートリアル >C# が oledb を使用して Excel に接続し、Insert Into ステートメントを実行する「更新可能なクエリを使用する必要がある」という問題を解決するサンプル コードです。
エラーが発生した時の環境: 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=yes; パラメータ HDR の値:
パラメータ Excel 8.0 Excel 97 以降から 2003 バージョンの場合は Excel 8.0 を使用し、2007 または 2010 の場合は Extended Properties=Excel 12.0 を使用します
IMEX(IMport EXportモード)設定
IMEXには3つのモードがあります:
0はエクスポートモード
1はインポートモード
2はリンクモード(フルアップ日付) 機能)
ここで特に説明したいのは、IMEX パラメーターです。異なるモードは異なる読み取り動作と書き込み動作を表すためです。
IMEX=0 の場合、このモードで開かれた Excel ファイルのみが使用できます。 「書く」目的のため。
IMEX=1の場合は「インポートモード」となり、このモードで開いたExcelファイルは「読み込み」のみに使用できます。
IMEX=2の場合、このモードで開かれたExcelファイルは「読み取り」と「書き込み」の両方の目的に対応できます。
の意味は次のとおりです:
0 ---出力モード;
2 ---リンクモード (完全な更新機能)
フォロー上記の説明では、接続文字列はプラグイン
クエリ」!
これは Web アプリケーションではなく C# WinForm プログラムであることに注意してください。
または検索してください。他の人がどのように問題を解決したかを見てみましょう。しかし、他の人の問題の解決方法を見た後、それはここでのテストに合格しません。
やはり IMEX 値に問題があるようです。1 に変更しても機能しない場合は、0 に変更してください。
ニマ、奇跡が起こりました!
その後、IMEX を 4 または 10 に設定してテストしましたが、結果は 1 と 2 を除いてすべて問題ありませんでした。これは本当に不正なリズムです。
以上がC# が oledb を使用して Excel に接続し、Insert Into ステートメントを実行する「更新可能なクエリを使用する必要がある」という問題を解決するサンプル コードです。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。