------- 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培训、期待与您交流! -------