sql语句查询 更新 excel数据提示“至少一个参数没有被指定值”

最近几天,准备将用C# 处理Excel的几种方式,写在一起,方便后面查代码,还有就是比较几种处理方式的运行效率。结果遇到一些需要总结 的点。

1、"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Expth + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;\"";   这玩意儿已测试,只能用office 2013(2013以后得版本没测,但office2021,office2024 已测试不可用)。另外,需要用到 AccessDatabaseEngine_X64_2010版, AccessDatabaseEngine_X64_2016版找到,但是不知道怎么用(没过多花时间研究,期待有知道答案的大佬赐教)。

2、标题上说的,至少一个参数没指定问题。 我这里的问题发生在参数问题上,当我们的Excel表第一行不是标准的(第一行单元格合并了)那么一下代码中的 HDR=YES 就应该改为 HDR=NO

以下代码是报错

string exDts = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Expth + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;\"";

以下代码是正确

string exDts = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Expth + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO;\"";

感谢OLEDB操作EXCEL_oledb excel-CSDN博客 大佬解惑!!

结果搬运过来,备查备用。

注:1)使用 Excel 工作簿时,默认情况下,区域中的第一行是标题行(或字段名称)。如果第一个区域不包含标题,您可以在连接字符串的扩展属性中指定 HDR=NO。如果您在连接字符串中指定 HDR=NO,Jet OLE DB 提供程序将自动为您命名字段(不管excel中的列叫什么名字,F1 表示第一个字段,F2 表示第二个字段,依此类推,select F1,F2 from [sheet1$]);

2)IMEX=1将所有读入数据看作字符,其他值(0、2)请查阅相关帮助文档;

3)如果出现“找不到可安装的isam”错误,一般是连接字符串错误

DoOleSql(sql,"test.xls");
6、删除excel文件中的数据:不提倡使用这种方法

7、对于非标准结构的excel表格,可以指定excel中sheet的范围

1)读取数据:string sql = "select * from [sheet1$A3:F20]";

2)更新数据:string sql = "update [sheet1$A9:F15] set FieldName='333' where AnotherFieldName='b3'";

3)插入数据:string sql = "insert into [sheet1$A9:F15](FieldName1,FieldName2,…) values('a',’b’,…)";

2003和2007的链接区别
//string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excelFile + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; //此连接只能操作Excel2007之前(.xls)文件

string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + excelFile + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"; //此连接可以操作.xls与.xlsx文件

//获取excel中都有哪些sheet

dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
 

下附一个按钮的全部代码,记得先using System.Data.OleDb;

            string Expth = @"F:\匹配表\散表1\表名.xls";
            string exDts = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Expth + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO;\"";
            //使用 Excel 工作簿时,默认情况下,区域中的第一行是标题行(或字段名称)。如果第一个区域不包含标题,您可以在连接字符串的扩展属性中指定 HDR=NO
            OleDbConnection exCon = new OleDbConnection(exDts);
            exCon.Open();
            string updatCmd = "UPDATE [Sheet1$] SET F5 = 'setvalue' WHERE F4 = '条件'";
            OleDbCommand upd_cmd = new OleDbCommand(updatCmd,exCon);
            upd_cmd.ExecuteNonQuery();
            exCon.Close();

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值