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

相关推荐
高梦轩1 分钟前
Python 操作 MySQL 数据库
数据库·oracle
Arva .2 分钟前
Redis 数据类型
数据库·redis·缓存
CDN3608 分钟前
高防切换后网站打不开?DNS 解析与回源路径故障排查
前端·网络·数据库
guygg8827 分钟前
OPC UA Helper: 连接PLC获取变量值
服务器·网络·c#
笑我归无处35 分钟前
Redis和数据库的数据一致性问题研究
数据库·redis·缓存
CN.LG40 分钟前
Excel 中把 Sheet页所有 “xxx” 字体标红
excel
水痕011 小时前
使用sqlSugar来操作mysql数据库
数据库·mysql
zandy10111 小时前
衡石科技 HENGSHI SENSE:一站式智能分析平台,让企业数据价值“所见即所得”
大数据·数据库·科技
fly spider1 小时前
MySQL日志篇
数据库·mysql
QC·Rex1 小时前
向量数据库对比与实战:从原理到生产落地
数据库·人工智能·向量数据库