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 += readeri + " ";

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 += readeri + " ";

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#教程 目录

相关推荐
城管不管36 分钟前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
倔强的石头10644 分钟前
向量数据库从相似度检索走向融合数据底座
数据库
csdn_aspnet2 小时前
C# 在逗号分割的字符串中判断是否包含指定字符
c#·正则·linq·string·regex·contains
今天AI了吗2 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
宝桥南山2 小时前
Blazor Web Assembly - 体验一下Authentication State从Server共享给Client
microsoft·微软·c#·asp.net·.net·.netcore
lilian2333 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
皮卡丘不断更4 小时前
手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口
数据库·sqlite·fastapi·开源项目·个人效率
淡海水4 小时前
02-06-历史-托管GC机制-垃圾回收如何影响数据结构选择
c#·编译·gc·机器码
保卫大狮兄4 小时前
设备管理从台账到报废,完整生命周期一次讲清
数据库·设备管理·设备
数据安全技术观察5 小时前
数据动态脱敏:让脱敏策略跟着数据目录走
大数据·网络·数据库