Chinaunix首页 | 论坛 | 博客
  • 博客访问: 880272
  • 博文数量: 372
  • 博客积分: 10063
  • 博客等级: 中将
  • 技术积分: 4220
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 11:36
文章分类

全部博文(372)

文章存档

2012年(372)

分类: 虚拟化

2012-04-23 21:11:33

第一步、建立数据库连接

ž打开login项目(这个应该不难,只需要在新建项目中添加按钮与文本框)备用
ž为简便起见,此处先介绍如何访问Access数据库
ž在Access中新建一个名为clientmanage的数据库,存放在d:\temp,增加一个名为login的表,其结构为:username,文本(6); password,文本(6)  设置username为关键字。
ž随意输入几条记录并保存。
ž为了连接到Access数据库,必须使用OleDbConnection对象ž访问窗体的事件,在顶部已有的若干行using语句后添加一句:

using System.Data.OleDb;

该语句的作用是指明在本程序中使用OLEDB技术,它是.net环境中访问数据库的一种方法,即ADO.net,ADO指active Data Objects(活动数据对象)

ADO中包含了连接到各种数据库的conncetion对象,为了访问access数据库,必须使用OleDbConnection对象

ž
在定义类的声明后加入

OleDbConnection Login_conn=new OleDbConnection();

该语句声明了Login_conn变量用于创建一个新的连接

ž在窗体的load事件中加入

Login_conn.ConnectionString=@”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp\clientmanage.mdb”;

该语句指示Login_conn变量该以何种方式连接数据库(本例中使用微软的jet数据库引擎4.0版本),以及数据库的存放位置

Login_conn.Open();

该语句建立了一个实际的连接。

建立连接后,相当于从C#到数据库之间有了一条道路,使C#有能力访问到数据库

 

第二步、关闭数据库连接

 

ž与数据库的连接必须显式关闭,否则,即使关闭了窗体,数据库连接依然存在并占用系统资源

 

ž对窗体的formclosing事件输入代码

 

Login_conn.Close();

 

Login_conn.Dispose();

 

含义为:先关闭连接,后删除连接

 

第三步、创建DataAdapter

 

žDataAdapter负责按指定的条件,将数据从源数据库中取出,存放到内存中的DataTable,供C#读写,并负责将更新后的数据写回源数据库。即C#并不直接读写源数据库。
žDataAdapter对象同样有多种,为了访问Access,必须使用OleDbDataAdapter
ž在类定义头部加入

OleDbDataAdapter Login_da;

该语句定义了一个DataAdapter类型的变量

在“提交”按钮的单击事件中加入

Login_da = new OleDbDataAdapter("select * from login where username='"+this.textBox1.Text+"' and password='"+this.textBox2.Text+"'", Login_conn);

 

该语句的作用是,根据已打开的数据库连接,按指定条件取出其中的数据,引号中为sql语句

执行完以上语句后,数据库中的内容已被读出。

下一步,需要将读出的数据存放到datatable中。

 

第四步、使用datatable

 

žDataTable是源数据库在内存中的映像,C#将数据读出并存放到其中,再进行其他操作。

 

ž在类定义部分加入

 

DataTable Login_dt=new DataTable();

 

该语句定义了变量Login_dt以引用一个新的DataTable

 

int RowPosition=0;

 

定义变量用于存放初始的记录指针位置,此变量备用

 

在“提交”按钮的单击事件中加入

 

Login_da.Fill(login_dt);

 

该语句将DataAdapter读取的数据填充到刚建立的DataTable中,以便于C#读写

 

显然,若用户名和密码输入错误,dataadapter无法从login表中找到满足条件的记录,datatable中也必然是空的,无记录。

 

žDatatable具有Rows集合,表示其中的行,该集合具有Count属性,用于判断行的数量,因此可在填充完datatable后,执行以下语句:

if (Login_dt.Rows.Count == 0)

   MessageBox.Show("错误的用户名或密码!");

else

   MessageBox.Show("正确,欢迎访问!");

ž该代码初次运行似无问题,但是多运行几次就会发现,若某次输入的用户名和密码是正确的,则之后若再输入错误,同样会提示正确。
ž究其原因, 每次对datatable进行fill操作时,不会自动清空上次的数据,导致行数始终不为0,从而判断出错。
ž解决方法:在执行fill方法之前,先执行

     Login_dt.Clear();

ž即可。Clear方法将先行清空datatable中的数据。
 
第五步、对登录界面细节的改进

1、当用户输入错误时,应自动清空用户名和密码框,然后将光标置于用户名框内

if (Login_dt.Rows.Count == 0)

{MessageBox.Show("错误的用户名或密码!");

this.textBox1.Text = "";

this.textBox2.Text = "";

this.textBox1.Focus();}  注:focus方法为设置活动对象

2、若用户未输入用户名或密码,会有相应提示

可用一系列的if结构的嵌套来解决该问题,同样也可在提示后设置相应的文本框为活动对象

代码修改如下:

if (this.textBox1.Text == "")

            {

                MessageBox.Show("用户名不能为空!");

                this.textBox1.Focus();

            }

            else

            {

                if (this.textBox2.Text == "")

                {

                    MessageBox.Show("密码不能为空!");

                    this.textBox2.Focus();

                }

                else

                {……………………………………后略

ž若用户名和密码均已输入,但连续输错三次,则直接退出系统

在类定义后 int i = 3;

程序中对应代码可改为:

if (Login_dt.Rows.Count == 0)

{

i = i - 1;

  if (i == 0)

     {

MessageBox.Show("您已经3次输入错误,不能再使用本系统!");

this.Close();

      }

   else

  {

MessageBox.Show("错误的用户名或密码!您还有"+i.ToString()+"次机会!");

………………………………略

 

 

好,今天就写到这里,下次再经过试验与纠正发布连接SQL的方法步骤,另外以上可能有诸多错误,希望大家热心指正。谢谢

阅读(1544) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~