ADO.NET,数据库N万条数据操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ADO.NET,数据库N万条数据操作相关的知识,希望对你有一定的参考价值。

数据库表里存有上万的记录,15以上的字段 我要把他们取出来,然后判断其中一个字段分别绑定到不同的图片上,然后输出到界面的LISTVIEW控件上。别说上万了,2千加载的慢的吓人 上万崩溃,一下是我代码:
string Sql = "select * from 表名";
dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, Sql, null);
while (dr.Read())

zt =dr["字段"].ToString().Trim();
AddItems(zt);

dr.Close();
dr.Dispose();
private void AddItems(string Rzt)

if (Rzt == "****")

this.lvDesk.Items.Add(dr["RoomName"].ToString(), 1);

if (Rzt == "****")

this.lvDesk.Items.Add(dr["RoomName"].ToString(), 1);

if (Rzt == "****")

this.lvDesk.Items.Add(dr["RoomName"].ToString(), 1);
if (Rzt == "****")

this.lvDesk.Items.Add(dr["RoomName"].ToString(), 1);

if (Rzt == "****")

this.lvDesk.Items.Add(dr["RoomName"].ToString(), 1);

if (Rzt == "****")

this.lvDesk.Items.Add(dr["RoomName"].ToString(), 1);


else

this.lvDesk.Items.Add(dr["RoomName"].ToString(), 0);


大概就是这样,怎么优化????

第一,不能使用SELECT * XXX ,这是性能大忌。
第二,没有什么机器能一次性读取海量数据而耗时很少。
第三,处理海量数据的时候,一般都是使用存储过程把大量数据分页,
每次仅仅提取其中的10几条或者20几条记录,这样才能控制在毫秒以内的响应时间。
参考技术A 1.在SQL语句中,指定字段名,看你的程序用到了RoomName字段,就只指定该字段,避免使用"*"将所有字段值返回到程序.
2.如果是页面的展示,一般可以采用分页的方式,每次处理100条左右的记录进行处理,避免将所有记录一次性返回到客户端.
3.对该表的字段建立索引.
参考技术B *不可取

使用ADO.NET查询和操作数据

1、StringBuilder类——定义可变字符串

做到既重复修改,又不创建新的对象(与String类的区别)

常用方法:

  • 1) Append()在结尾追加
  • 2) Insert()在指定位置插入指定字符串
  • 3) Remove()移除指定字符串

2、DataReader对象——用于读取数据库中的数据

DataReader 的主要成员:

 技术图片

3、使用 DataReader 检索数据的步骤:

  • 创建 Command 对象
  • 调用 ExecuteReader() 创建 DataReader 对象
  • 使用 DataReader Read() 方法逐行读取数据
  • 读取某列的数据,(type)dataReader[ ]     注:获取某列的值:方法一:指定列的索引,从0开始  方法二:指定列名
  • 关闭 DataReader 对象:注意:DataReader 使用后必须关闭

 4、更新数据

ataReader对象只能为应用程序提供数据库的查询数据,如何实现数据库数据的增加、

删除和修改操作呢?需要调用Command对象的ExecuteNonQuery()方法。

使用 ExecuteNonQuery() 的步骤小结:

  • 1、创建 Connection 对象
  • 2、定义sql 语句
  • 3、创建 Command 对象
  • 4、执行 ExecuteNonQuery() 方法
  • 5、根据返回的结果进行处理

注:使用ExecuteNonQuery() 方法返回的是受SQL语句影响的记录行数。如果返回值小于或等于0,说明没有记录受影响。

  

5ADO.NET总结

在对数据源执行操作时,可能会执行数据更新(增删改)操作或查询操作。对于查询操

作可能存在两种情况:一是查询获得单个值,二是查询获得若干条记录。

查询单个值

需要使用Command对象的ExecuteScalar()方法,步骤如下。

(1)创建Connection对象。

(2)拼写SQL查询语句。

(3)使用SQL语句和Connection对象创建Command对象。

(4)打开数据库连接,调用Connection对象的Open()方法。

(5)调用Command对象的ExecuteScalar()方法,返回一个标量值。

(6)操作完成后关闭数据库连接,调用Connection对象的Close()方法。

查询若干条记录

需要使用Command对象的ExecuteReader()方法,步骤如下。

(1)创建Connection对象。

(2)拼写SQL查询语句。

(3)使用SQL语句和Connection对象创建Command对象。

(4)打开数据库连接,调用Connection对象的Open()方法。

(5)调用Command对象的ExecuteReader()方法,返回一个DataReader对象。

(6)在循环中调用DataReader对象的Read()方法,逐行读取记录。如果读到记录则返回true,否则返回false。

(7)使用(type)dataReader[列名或索引]的方式读取这一行中某一列的值。

(8)调用DataReader对象的Close()方法,关闭DataReader对象。

(9)操作完成后关闭数据库连接,调用Connection对象的Close()方法。

 

数据更新操作

对数据库执行数据更新操作时(包括增加、修改、删除数据)都使用Command对象的

ExecuteNonQuery()方法,步骤如卞。

(1)创建Connection对象。

(2)拼写SQL增删改语句。

(3)使用SQL语句和Connection对象创建Command对象。

(4)打开数据库连接,调用Connection对象的Open()方法。

(5)调用Command对象的ExecuteN0nouery()方法执行命令,返回数据库中受影响的

行数。

(6)操作完成后关闭数据库连接,调用Connection对象的Close()方法。

command对象的三种方法的对比如下所示。

※  ExecuteScalar()方法:执行查询操作,并返回结果集中的第一行和第一列。

※  ExecuteReader()方法:执行查询操作,返回DataReader对象。

※  ExecutenonQuery()方法:执行添加、修改、删除操作,返回受影响的行数。

以上是关于ADO.NET,数据库N万条数据操作的主要内容,如果未能解决你的问题,请参考以下文章

C# 数据操作系列 - 2. ADO.NET操作

ADO.Net——数据库操作类

ADO.NET操作Oracle问题

ADO.NET复习总结-断开式数据操作

讲义17:ADO.NET数据库技术

ADO.Net1