19.4.9 数据库方式操作Excel

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

本节所说的操作Excel操作是讲如何把Excel作为数据库来操作。

通过COM来操作Excel操作,请参看第21.2节

在第19.3.4节**【** 连接Excel**】**中已经讲述了如何连接Excel。剩下的操作就和前面几节操作Access数据库一样。

**注意:**Excel不支持删除一行记录,使用SQL的delete语句会返回错误。如果需要在Excel中删除一行记录,请参看第21.2.4节。

本节使用到的样例Excel表是从北风数据库中产品表的部分数据:

图19-38 产品表信息

【例 19.17 【项目:code19-017】产品信息管理。

OleDbConnection conn;

private void Form1_Load(object sender, EventArgs e)

{

conn = new OleDbConnection();

//32位office使用以下语句

conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\\lessons\\Northwind.xlsx;Extended Properties='Excel 8.0; HDR=YES;'";

conn.Open();

//64位office使用以下语句,而且程序要编译为64位

//conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\lessons\\Northwind.xlsx;Extended Properties='Excel 12.0 XML;HDR=YES;'";

//conn.Open();

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

conn.Close();

}

//查询所有数据

private void btnQueryAll_Click(object sender, EventArgs e)

{

string sql = "select * from [产品$]";

OleDbCommand command = new OleDbCommand(sql, conn);

OleDbDataReader reader = command.ExecuteReader();

int fieldCount = reader.FieldCount;

string info = "";

if( reader.HasRows)

{

string strtemp = "";

while(reader.Read())

{

strtemp = "";

for (int i = 0; i < fieldCount; i++)

strtemp += reader[i] + " ";

strtemp += "\r\n";

info += strtemp;

}

}

reader.Close();

TextBox1.Text = info;

}

//查询单价大于30的数据

private void btnQuery_Click(object sender, EventArgs e)

{

string sql = "select * from [产品$] where 单价>30";

OleDbCommand command = new OleDbCommand(sql, conn);

OleDbDataReader reader = command.ExecuteReader();

int fieldCount = reader.FieldCount;

string info = "";

if(reader.HasRows)

{

string strtemp = "";

while(reader.Read())

{

strtemp = "";

for (int i = 0; i < fieldCount; i++)

strtemp += reader[i] + " ";

strtemp += "\r\n";

info += strtemp;

}

}

reader.Close();

TextBox1.Text = info;

}

//增加数据

private void btnAdd_Click(object sender, EventArgs e)

{

string sql = "insert into [产品$] values('奶酪','每箱24瓶',55,79,0)";

OleDbCommand command = new OleDbCommand(sql, conn);

try

{

command.ExecuteNonQuery();

MessageBox.Show("添加数据成功!");

}

catch(Exception ex)

{

MessageBox.Show("添加数据失败:" + ex.Message);

}

}

//修改数据

private void btnEdit_Click(object sender, EventArgs e)

{

string sql = "update [产品$] set 产品名称='温馨奶酪',单价=80 where 产品名称='奶酪'";

OleDbCommand command = new OleDbCommand(sql, conn);

try

{

command.ExecuteNonQuery();

MessageBox.Show("修改数据成功!");

}

catch (Exception ex)

{

MessageBox.Show("修改数据失败:" + ex.Message);

}

}

运行结果如下图所示:

图19-39 列出产品信息

如果遇到已经安装了64位数据库引擎,但是仍然提示:

图19-40 提示未注册OLEDB12.0

请在项目属性【生成】|【目标平台】处选择X86。

图19-41 设置生成目标平台

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

相关推荐
JIngJaneIL5 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
专注VB编程开发20年5 小时前
C#全面超越JAVA,主要还是跨平台用的人少
java·c#·.net·跨平台
微学AI5 小时前
复杂时序场景的突围:金仓数据库是凭借什么超越InfluxDB?
数据库
廋到被风吹走6 小时前
【数据库】【Redis】定位、优势、场景与持久化机制解析
数据库·redis·缓存
有想法的py工程师7 小时前
PostgreSQL + Debezium CDC 踩坑总结
数据库·postgresql
Nandeska7 小时前
2、数据库的索引与底层数据结构
数据结构·数据库
小卒过河01047 小时前
使用apache nifi 从数据库文件表路径拉取远程文件至远程服务器目的地址
运维·服务器·数据库
过期动态7 小时前
JDBC高级篇:优化、封装与事务全流程指南
android·java·开发语言·数据库·python·mysql
Mr.朱鹏7 小时前
SQL深度分页问题案例实战
java·数据库·spring boot·sql·spring·spring cloud·kafka
一位代码7 小时前
mysql | 常见日期函数使用及格式转换方法
数据库·mysql