概述
DataReader与DataSet
可以使用DataReader类的对象或DataSet类的对象从数据库读取数据,但它们是有区别的,归纳起来大致有以下几条:
1. DataReader是数据管理提供者类,而DataSet是一般性数据类。
2. DataSet获取数据需要通过桥梁DataAdapter的填充,由于DataReader本身就是管理提供者,它可以通过Command的ExecuteReader()方法就可以获取数据。
3. DataReader是在线处理,当连接关闭后就不能读取数据;DataSet可以离线处理数据,它是把数据从数据库拷贝到本地存储,在关闭连接的情况下仍然可以在DataSet中处理数据,甚至可以在本地存储的表格中增加限制。
4. DataReader只能正向读取数据,但不能修改数据;DataSet可以按任何顺序读行,可以按灵活的方式搜索、排序和过滤这些行,甚至可以改变这些行,然后将这些改变同步到数据库中。
5. 从DataReader读取数据的速度快于DataSet。
6. 由于DataSet是离线处理,所以当在事务处理中要锁定数据库是,不可以使用DataSet。因为当DataSet被填充以后,会自动断开与数据库的连接,此时不可能再对数据库进行锁定。
可以看出,在通常情况下,DataSet与 DataReader可能可以相互代替,当有特定要求时却需要仔细分析,到底使用哪种方式更合适。
DataReader与DataSet最根本的区别就在于一个是在线处理,另一个是离线处理。在线时,得到的是数据库当前的真实数据,但总是在线的话,增加了网络的通讯负担。离线后数据拷贝在本地,可以减轻网络负担,程序处理数据更加方便,若离线时间过长,看到的数据就不一定是真实的数据了。
用DataReader类处理登录表单
{
bool a_accept=false;
string connectionString="workstation id=localhost;initial catalog=CommuList;user id=sa; pwd=";
SqlConnection myConnection=new SqlConnection(connectionString);
SqlCommand myCommand=myConnection.CreateCommand();
myCommand.CommandText="select * from Users";
myConnection.Open();
SqlDataReader myDataReader=myCommand.ExecuteReader();
while(myDataReader.Read())
if(myDataReader.GetString(0).Trim()==textBoxUser.Text.Trim() &&
myDataReader.GetString(1).Trim()==textBoxPW.Text.Trim())
{
a_accept=true;
break;
}
if(a_accept==true)
{
MessageBox.Show("恭喜你可以成功登录!");
this.Close();
}
else
{
MessageBox.Show("你的用户名或密码错误,请重新输入!");
textBoxUser.Text="";
textBoxPW.Text="";
textBoxUser.Focus();
}
}
private void textBoxUser_KeyDown( object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyCode.ToString()=="Down" || e.KeyCode.ToString()=="Right"|| e.KeyCode.ToString()=="Enter")
textBoxPW.Focus();
}
private void textBoxPW_KeyDown( object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyCode.ToString()=="Down" || e.KeyCode.ToString()=="Right"|| e.KeyCode.ToString()=="Enter")
buttonLogOn.Focus();
}
}
}
用DataSet类处理登录表单
{
string userName=textBoxUser.Text;
string userPassword=textBoxPW.Text;
string connectionString="workstation id=localhost;initial catalog=CommuList;user id=sa; pwd=";
SqlConnection myConnection=new SqlConnection(connectionString);
SqlCommand myCommand=myConnection.CreateCommand();
string commandString="select * from Users where UserId='"+userName+"' and PassWord='"+userPassword+"'";
myCommand.CommandText=commandString;
DataSet myDataSet=new DataSet();
SqlDataAdapter myAdapter=new SqlDataAdapter();
myAdapter.SelectCommand=myCommand;
myConnection.Open();
int n=myAdapter.Fill(myDataSet,"Users");
if(n==0)
{
MessageBox.Show("用户名或密码错误,请重新输入!");
textBoxUser.Text="";
textBoxPW.Text="";
textBoxUser.Focus();
}
else
{
MessageBox.Show("恭喜您可以成功登陆!");
this.Close();
}
}
最后
以上就是寒冷皮带为你收集整理的DataReader与DataSet区别的全部内容,希望文章能够帮你解决DataReader与DataSet区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复