Sql Server 的DataReader 与 DataSet
刚刚使用sql数据库,发现,竟然忘记了怎么用,
》》DataReader 的原理是返回一个游标,Read的时候会通过与sql的链接读取游标所指向行的数据,返回给客户端,其优点是,不占用客户端内存,适用于取多条数据,缺点是不能断开与数据库的链接,而且只能顺序读取数据,不可回头。
》》DataSet的原理是在内存中生成一个dataset,再以sqldataAdapter为桥梁,将查询到的数据fill到这个内存中的DataSet中,DataSet是由多个DataTable组成的。客户端通过Dataset中的DataTable获取查询到的数据,其优点是一次性取回所有要求的数据,并放置于内存中,使用这些数据的时候直接从客户端的内存中取出,可以随意的读取。不需要到sql的链接存在,而且还可以修改内存中的DataSet 修改完成后在通过SqlDataAdapter update到sql数据库中。缺点是将所得得数据放到内存中会占用客户端的内存,只适用于小数据量。
》》SQL Server连接。
1、sql的链接字符串,sql的链接字符串包含,a、sql服务器的地址和实例名Data Source=**;b、如果是附加到数据库的话要制定附件到数据库的mdf文件的地址AttachDbFilename="**";c、安全设置(登陆到数据库服务器);d、Connect Timeout 连接超时时间。
2、sql连接字符串可以放到程序的配置文件中,在<configuration>的下层建立一个<connectionStrings> 在其下<add name=“Conn” connectionString="连接字符串".(可以添加多个连接字符串)
3、读取配置文件中的连接字符串 ,首先要添加对System.Configuration的引用,在using System.Configuration。string constr=ConfigurationManager.ConnectionStrings["conn"].ConnectionString; 获取。
》》DataReader的使用
using(SqlConnection conn= new SqlConnection(constr))
{
conn.Open();
using (SqlCommand command=conn.CreateCommand())
{
command.CommandText = "select * from [T_UserDb]";
using (SqlDataReader read = command.ExecuteReader())
{
while (read.Read())
{
string username = read.GetString(read.GetOrdinal("UserName"));
string password = read.GetString(read.GetOrdinal("Password"));
}
}
}
使用流程:
a、建立一个新的SqlConnection;
b、打开sqlconnection,创建一个基于新建的sqlconnection的sqlcommand,
c、设置command的commandtype;command.CommandType= System.Data.CommandType.Text or StoredProcedure
d、设置command的commandtext为要执行的sql语句。
e、sqlDataReader reader=command.ExecuteReader() 执行sql语句并返回DataReader,返回DataReader的时候游标在第一行数据的上一行,DataReader.Readh后会移动到第一行,如果没有数据返回false,Read到组后一行后在执行Read 会将游标移动到最后一行的下一行,并返回一个false。
》》DataSet的使用
string constr= ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
DataSet mydataset=new DataSet();
using(SqlConnection conn= new SqlConnection(constr))
{
conn.Open();
using (SqlCommand command=conn.CreateCommand())
{
command.CommandType= System.Data.CommandType.Text ;
command.CommandText = "select * from [T_UserDb]";
using (SqlDataAdapter adapter = new SqlDataAdapter())
{
adapter.SelectCommand = command;
adapter.Fill(mydataset);
}
}
}
DataTable mytable = mydataset.Tables[0];
foreach (DataRow mydatarow in mytable.Rows)
{
string username = mydatarow["UserName"].ToString();
string id = mydatarow["ID"].ToString();
string password = mydatarow["Password"].ToString();
}
使用流程:
a、new一个dataset;DataSet mydataset=new DataSet();
b、建立一个新的SqlConnection;
c、打开sqlconnection,创建一个基于新建的sqlconnection的sqlcommand,
d、设置command的commandtype;command.CommandType= System.Data.CommandType.Text or StoredProcedure
e、设置command的commandtext为要执行的sql语句。
f、new一个SqlDataAdapter,并设置SqlDataAdapter 的selectcommand为command。
g、调用SqlDataAdapter 的fill 将查询到的数据填充到mydataset; adapter.Fill(mydataset,"mytable"); fill的时候可以指定表的名称,这样在取值的时候可以通过表名来获取datatable。
h、这个时候可以释放所有的sqlconnection和command和dataAdapter
i、读取dataset中的数据,首先要获取dataset中的datatable,方法为DataTable mytable = mydataset.Tables[0]或者DataTable mytable = mydataset.Tables["mytable"];接下来foreach mytable中的每一行,通过mydatarow["字段名"]获取数据。