C#通過OLEDB讀寫Excel2013顯示到datagrid控件,修改數據集並更新excel2013


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 = "]";

我不知道加前綴和后綴的[,],對我的哪個代碼有用處,

需要路過的朋友指點一下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM