微信小程序> OleDB操作Excel链接字符串及简单例子(转)

OleDB操作Excel链接字符串及简单例子(转)

浏览量:874 时间: 来源:想起你的日子

转:https://www.cnblogs.com/hudianxing/p/5078321.html   
       http://www.cnblogs.com/hunpo/archive/2013/02/10/2909787.html  

Office2003:

        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";

Office2007/2010/2013:

        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";

注释:

provider:表示提供程序名称

Data Source:这里填写Excel文件的路径

Extended Properties:设置Excel的特殊属性

Extended Properties 取值:

Excel 8.0   针对Excel2000及以上版本,Excel5.0 针对Excel97。

HDR=Yes 表示第一行包含列名,在计算行数时就不包含第一行

IMEX   0:导入模式,1:导出模式:2混合模式

excel是2013的,C#是VS2012的;excel 文件是在本机的D盘;

代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Data.OleDb;

 

namespace _20

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            //IMEX:只有是0才能成功更新,1或2都有错误提示,操作必须使用一个可更新的查询,2也有奇怪?

            string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @"d:/成绩表2013.xlsx" + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=0'";

            //string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:/成绩表2013.xlsx;Extended Properties='Excel 12.0;HDR=YES;IMEX=0'";

            OleDbConnection myConn = new OleDbConnection(strCon);

            string strCom = "SELECT * FROM [Sheet1$]";

            myConn.Open();

            OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(strCom, myConn);

            DataSet myDataSet = new DataSet();

            myDataAdapter.Fill(myDataSet, "[Sheet1$]");

            myConn.Close();

            DataTable dt = myDataSet.Tables[0]; //初始化DataTable实例

            dt.PrimaryKey = new DataColumn[] { dt.Columns["学生"] };//创建索引列

            DataRow myRow = dt.NewRow();

            myRow["学生"] = "小蟹";

            myRow["英语"] = 82;

            myRow["数学"] = 93;

            myRow["自然"] = 39;

            myRow["美术"] = 39;

            dt.Rows.Add(myRow);

            OleDbCommandBuilder odcb = new OleDbCommandBuilder(myDataAdapter);

            odcb.QuotePrefix = "[";   //用于搞定INSERT INTO 语句的语法错误

            odcb.QuoteSuffix = "]";

            myDataAdapter.Update(myDataSet, "[Sheet1$]"); //更新数据集对应的表

            dataGridView1.DataSource = myDataSet.Tables[0].DefaultView; //显示到datagridview

        }

    }

}

 成功了,但有两个问题:

1. 奇怪的是IMEX=0才能更新成功? IMEX=2却不能,与如下原则违背:

     当 IMEX=0 时为“写出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。

  当 IMEX=1 时为“写入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。

  当 IMEX=2 时为“混合模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。

照例说IMEX=2应该可以啊? 不知为什么上面语句我用IMEX=2就会发生“操作必须使用一个可更新的查询”问题;

2.为什么一定要

odcb.QuotePrefix = "[";   //用于搞定INSERT INTO 语句的语法错误

odcb.QuoteSuffix = "]";

我不知道加前缀和后缀的[,],对我的哪个代码有用处,

 

 

 

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎