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 = "]" ; |
我不知道加前缀和后缀的[,],对我的哪个代码有用处,
需要路过的朋友指点一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)