黑马程序员_ADO.NET通过DataReader快速访问数据库
来源:互联网 发布:宿州云计算数据机房 编辑:程序博客网 时间:2024/05/19 18:39
------- ASP.Net+Unity开发、.Net培训、期待与您交流! -------
ADO.NET另外一种访问数据库的模式是使用SqlDataReader以连接模式访问数据库,不同于用非连接模式访问数据库将查询返回的数据保存在客户端内存中,SqlDataReader在访问数据库期间,总是和数据库保持连接状态,每次返回一条数据到客户端网络缓冲区中,读取下一条数据前再返回下一条数据,所以速度较快,由于不在内存中缓存大量数据,所以这种模式适合于检索大量数据而且不需要做大量处理的访问。
SqlDataReader返回不同类型的数据,SqlCommand使用的方法也不同:
1、ExecuteReader()方法和read()方法,对数据库进行查询,返回多行结果集时,用到这两个方法。ExecuteReader()属于SqlCommand,read()属于SqlDataReader。
//初始化连接字符串
string str=”Data Source=服务器ip地址;Database=数据库名;User Id=登录名;Password=密码”;
//和数据库建立连接
using(SqlConnection conn=newSqlConnection(str))
{
conn.Open();
//配置SqlCommand操作命令类
using(SqlCommand comm=conn.CreateCommand)
{
comm.CommandText=”Sql 查询字符串”;
//SqlDataReader会占用SqlConnection,而且SqlDataReader也继承了IDisposible接口,
//所以SqlDataReader也需要被释放
using(SqlDataReader reader=comm.ExecuteReader())
{
//开始时,记录指针指向第一条数据的前边,每调用一次SqlDatareader的read()方//法,记录就下移一条,直到最后一条数据的后面。
while(reader.read())
{
string info=null;
for(int i=0;i<reader.FieldCount;i++)
{
Info+=reader[i].ToString+” ”;
}
MessageBox.Show(info);
}
}
}
}
2、ExecuteScalar()方法,一般用来执行只有一行一列返回值的sql语句,例如Sql语句用count()聚合函数查询记录总数。此方法属于SqlCommand。
using(SqlConnection conn=newSqlConnection(str))
{
conn.Open();
using(SqlCommand comm=conn.CreateCommand())
{
comm.CommandText=”select count(*)from table1”;
int count=(int)comm.ExecuteScalar();
MessageBox.Show(count.ToString());
}
}
3、ExecuteNonQuery()方法,当执行不返回数据的Sql语句(insert、delete、update)时,用这个方法,此方法属于SqlCommand。如果执行成功,此方法返回受影响的行数,如果失败,则返回-1。
using(SqlConnection conn=newSqlConnection(str))
{
conn.Open();
using(SqlCommand comm=conn.CreateCommand())
{
comm.CommandText=”deletefrom table1 whereid=1”;
if(comm.ExecuteNonQuery()!=-1)
{
MessageBox.Show(删除成功);
}
}
}
4、SqlBulkCopy类的使用。
当向数据库中大批量插入数据时,如果用insert语句一条一条的插,速度非常慢,.NET提供了一个向数据库中大批量插入数据的专用类,效率很高。方法如下:
(1、 实例化一个DataTable对象,DataTable table=new DataTable();
给表添加列,table.Columns.Add("姓名");table.Columns.Add("年龄");
创建行,DataRowrow=table.NewRow();
for循环中给每个行的每列添加数据
for()
{
row["姓名"]="小伟";row["年龄"]=29;
//将行添加到table中
table.rows.Add(row);
}
(2、用SqlBulkCopy类代替SqlConnection类来对数据库进行连接,插入数据。
using(SqlBulkCopy bulkcopy=newSqlBulkCopy())
{
bulkcopy.DestinationTableName="table1";//指定要插入的数据库的名字
//建立本地DataTable与数据库表中DataTable的列的映射
//第一个参数是本地表中的列名,第二个参数是数据库中的表中的列名
bulkcopy.ColumnMappings.Add("姓名","name");
bulkcopy.ColumnMappings.Add("年龄","age");
//将本地DataTable中的数据插入数据库中的表中
bulkcopy.WriteToServer(table);
}
------- ASP.Net+Unity开发、.Net培训、期待与您交流! -------
- 黑马程序员_ADO.NET通过DataReader快速访问数据库
- 黑马程序员_ADO.NET通过DataSet访问数据库
- 黑马程序员_ADO.Net 数据库访问技术
- 黑马程序员_ADO.NET连接数据库
- 黑马程序员_ADO.NET
- 黑马程序员_ADO.NET数据库连接
- 黑马程序员_ADO.NET学习
- 黑马程序员_ADO.NET操作数据库的过程
- 黑马程序员_ADO.NET学习笔记
- 黑马程序员_ADO.NET学习笔记
- 黑马程序员_Ado.net学习总结
- 黑马程序员_ADO.NET学习知识总结
- 黑马程序员_ADO.NET 一个简单的登录程序
- 黑马程序员_学习日记5_ADO.Net入门1
- 黑马程序员_学习日记6_ADO.Net入门2
- 黑马程序员_学习日记15_ADO.Net之DataSet
- ASP.NET遇到问题---Datareader访问数据库
- 黑马程序员_ADO.Net(ExecuteReader,Sql注入与参数添加,DataSet,总结DataSet与SqlDataReader )
- 设计一门脚本语言——(二)预处理
- 设置EditText的输入内容,并处理重复点击事件
- 使用Lua Function表示Lambda calculus
- 怎么将vim修改像vc++自动换行缩进
- 常用运行命令集锦
- 黑马程序员_ADO.NET通过DataReader快速访问数据库
- Ext ajax上传文件
- C# 实现的一个二叉树类
- Android ANR
- 为什么用Spring来管理Hibernate?
- QT多线程TCP接收服务器
- html中Span标签的点击事件
- 离职与跳槽转载
- jsoncpp一个例子