DataReader与DataSet区别

DataReaderDataSet

可以使用DataReader类的对象或DataSet类的对象从数据库读取数据,但它们是有区别的,归纳起来大致有以下几条:

1.       DataReader是数据管理提供者类,而DataSet是一般性数据类。

2.       DataSet获取数据需要通过桥梁DataAdapter的填充,由于DataReader本身就是管理提供者,它可以通过CommandExecuteReader()方法就可以获取数据。

3.       DataReader是在线处理,当连接关闭后就不能读取数据;DataSet可以离线处理数据,它是把数据从数据库拷贝到本地存储,在关闭连接的情况下仍然可以在DataSet中处理数据,甚至可以在本地存储的表格中增加限制。

4.       DataReader只能正向读取数据,但不能修改数据;DataSet可以按任何顺序读行,可以按灵活的方式搜索、排序和过滤这些行,甚至可以改变这些行,然后将这些改变同步到数据库中。

5.       DataReader读取数据的速度快于DataSet

6.       由于DataSet是离线处理,所以当在事务处理中要锁定数据库是,不可以使用DataSet。因为当DataSet被填充以后,会自动断开与数据库的连接,此时不可能再对数据库进行锁定。

 

可以看出,在通常情况下,DataSet DataReader可能可以相互代替,当有特定要求时却需要仔细分析,到底使用哪种方式更合适。

DataReaderDataSet最根本的区别就在于一个是在线处理,另一个是离线处理。在线时,得到的是数据库当前的真实数据,但总是在线的话,增加了网络的通讯负担。离线后数据拷贝在本地,可以减轻网络负担,程序处理数据更加方便,若离线时间过长,看到的数据就不一定是真实的数据了。

DataReader类处理登录表单

 

private   void  buttonLogOn_Click( object  sender, System.EventArgs e)

        
{   

            
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类处理登录表单

private   void  buttonLogOn_Click( object  sender, System.EventArgs e)

        
{  

            
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();

            }


        }


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值