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

相关推荐
库库林_沙琪马43 分钟前
Redis 持久化:从零到掌握
数据库·redis·缓存
牵牛老人2 小时前
Qt中使用QPdfWriter类结合QPainter类绘制并输出PDF文件
数据库·qt·pdf
卡西里弗斯奥4 小时前
【达梦数据库】dblink连接[SqlServer/Mysql]报错处理
数据库·mysql·sqlserver·达梦
温柔小胖4 小时前
sql注入之python脚本进行时间盲注和布尔盲注
数据库·sql·网络安全
黄金小码农5 小时前
c# 2025/2/19 周三
c#
杨俊杰-YJ5 小时前
MySQL 主从复制原理及其工作过程
数据库·mysql
一个儒雅随和的男子5 小时前
MySQL的聚簇索引与非聚簇索引
数据库·mysql
susan花雨7 小时前
C#发送邮件
c#
※※冰馨※※7 小时前
【C#】无法安装程序包“DotSpatial.Symbology 4.0.656”
windows·microsoft·c#
V+zmm101347 小时前
基于微信小程序的家政服务预约系统的设计与实现(php论文源码调试讲解)
java·数据库·微信小程序·小程序·毕业设计