C#使用Microsoft.ACE.OLEDB.12.0 需要安装的组件

報錯信息:
C#使用Microsoft.ACE.OLEDB.12.0 需要安装的组件_第1张图片
C#使用Microsoft.ACE.OLEDB.12.0 需要安装的组件
下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=13255
記得要選擇中英文版本,這個要注意,不然會安裝不了的。

微軟官網說明:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=13255
安裝說明:
注意:在安装此下载之前,必须先通过使用“控制面板”中的“添加/删除程序”,从你的计算机中卸载任何以前版本的 Access 数据库引擎。

若要安装此下载,请执行以下操作:
通过单击“下载”按钮并将文件保存到硬盘上来下载文件。
双击硬盘上的“AccessDatabaseEngine.exe”程序文件启动安装程序。
按照屏幕上的说明完成安装。
若要使用此下载,请执行以下操作:
如果您是应用程序用户,请查阅您的应用程序文档,了解有关如何使用相应驱动程序的详细信息。
如果您是使用 OLEDB 的应用程序开发人员,请将 ConnectionString 属性的 Provider 参数设置为“Microsoft.ACE.OLEDB.12.0”。

如果要连接到 Microsoft Office Excel 数据,请根据 Excel 文件类型添加相应的 OLEDB 连接字符串扩展属性:

文件类型(扩展名) 扩展属性

Excel 97-2003 工作簿 (.xls) “Excel 8.0”
Excel 2007-2010 工作簿 (.xlsx) “Excel 12.0 Xml”
启用宏的 Excel 2007-2010 工作簿 (.xlsm) “Excel 12.0 宏”
Excel 2007-2010 非 XML 二进制工作簿 (.xlsb) “Excel 12.0”

如果您是使用 ODBC 连接到 Microsoft Office Access 数据的应用程序开发人员,请将连接字符串设置为“Driver={Microsoft Access Driver (*.mdb, .accdb)};DBQ=path to mdb/accdb file”
如果您是使用 ODBC 连接到 Microsoft Office Excel 数据的应用程序开发人员,请将连接字符串设置为“Driver={Microsoft Excel Driver (
.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=path to xls/xlsx/xlsm/xlsb file”
若要删除此下载,请执行以下操作:
若要删除下载文件本身,请删除文件 AccessDatabaseEngine.exe
在“开始”菜单上,指向“设置”,然后单击“控制面板”。
双击 “添加/删除程序”。
在当前安装的应用程序列表中,选择“Microsoft Access 2010 数据库引擎”,然后单击“删除”或“添加/删除”。如果出现对话框,请按照说明删除该程序。
单击“是”或“确定”,以确认要删除该程序。

c# 代碼參考

 private void btn_export_to_excel()
        {
            try
            {
                string _file_path = Path.Combine(Application.StartupPath, comboBox1.Text.ToString());

                if (File.Exists(_file_path))
                {
                    if (MessageBox.Show(_file_path + " 已存在是否删除", _file_path + " 已存在是否删除", MessageBoxButtons.OKCancel) == DialogResult.OK)
                    {
                        File.Delete(_file_path);
                    }
                    else
                    {
                        return;
                    }
                }


                //Microsoft的OLEDB控件对64位 ----读excel文件
                //如果HDR=YES,DataTable默认的列名为Excel 第一行数据...
                //如果HDR=NO,DataTable默认的列名为F1,F2,F3...
                //string sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + "c:/ test.xls" + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1';";  // Office 07及以上版本 不能出现多余的空格 而且分号注意

                //写 excel 文件
                //弹出【未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”】的错误,一般是因为目标计算机是64位的,需要调整一下程序中Microsoft的OLEDB控件对64位的计算机兼容性。
                //String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=c:/test.xls;" + "Extended Properties=Excel 8.0;";
                String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + _file_path + ";" + "Extended Properties=Excel 12.0;";

                OleDbConnection cn = new OleDbConnection(sConnectionString);
                //string sqlCreate = "CREATE TABLE imm_data_log ([machineip] INTEGER,[Username] VarChar,[UserPwd] VarChar)";
                string sqlCreate = "CREATE TABLE imm_data_log ([设备ip] VarChar,[数据] Text,[日期] VarChar)";
                OleDbCommand cmd = new OleDbCommand(sqlCreate, cn);
                //创建Excel文件:C:/test.xls
                cn.Open();
                //创建 imm_data_log 工作表
                cmd.ExecuteNonQuery();
                //添加数据

                toolStripProgressBar1.Value = 1;

                int i = 1;

                decimal percent = 0;
                StringBuilder _sql_str = new StringBuilder();
                foreach (cls_hismessagedatalog item in imm_log_list)
                {
                    //_sql_str.Append("INSERT INTO imm_data_log VALUES('" + item.machineid + "','"+item.messagedata+"','"+ item.logdt+ "') ");

                    string _str = "INSERT INTO imm_data_log VALUES('" + item.machineid + "','" + item.messagedata + "','" + item.logdt + "') ";

                    cmd.CommandText = _str;
 
                    percent = (decimal)(((decimal)100 * i) / imm_log_list.Count);

                    toolStripProgressBar1.Value = Convert.ToInt32(percent);
                    //toolStripProgressBar1.ToolTipText = Convert.ToInt32(percent).ToString();

                     i = i + 1;
                    cmd.ExecuteNonQuery();
                }
                //string saa = _sql_str.ToString();

                cmd.CommandText = "INSERT INTO imm_data_log VALUES(1,'elmer','password')";
                //cmd.CommandText = _sql_str.ToString();

                //cmd.ExecuteNonQuery();
                Thread.Sleep(2000);
                //关闭连接
                cn.Close();

                MessageBox.Show("导出到Excel完成\r\n"+ _file_path , "导出到Excel完成");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                throw;
            }
        }

我想說的是 INSERT INTO imm_data_log 真的效率太低了,要再試試updata來提醒程序執行效率。。。

你可能感兴趣的:(c#,c#)