学生用户管理系统(二)

接着上一条随笔。

 

这个用户管理系统能够实现从sql server 数据库中的一张表读取用户名和密码来看是否与用户输入的相同,相同则进入另一个页面,否则跳messagebox.

若用户没有注册,该系统也提供了注册功能,如果注册的用户名重复了,系统会提示用户已重复。(这个功能研究的我最长时间,哎,醉了)如果没重复,

则成功注册,用户就可以通过注册后的用户登陆进去系统进入我们另一个页面了。

 

进入正题,

 

跟数据库连接时需要写出数据库的连接字符串,有两种形式。

 

即有Windows身份验证和SQL server 身份验证两种。

//sql server 身份验证 连接字符串  
  
private string ConnstrSqlServer = "server=服务器名称;uid=登录名称;pwd=登录密码;database=数据库名称";  
  
  
//windows 身份验证连接字符串  
  
private string ConnstrWindows = "server=服务器名称;database=数据库名称;Trusted_Connection=SSPI"; 

 

(如果忘了sql server身份验证的密码,可以通过windows身份验证进入查看数据库用户名,然后可以修改密码)

 

连接数据库需要sqlconnection,还有数据表查询字符串。

只要前面的连接字符串以及sqlconnection 无误,基本可以打开数据库了(sqlconnection.open())

 

  string sqlstring = "server=ZJX-PC;uid=sa;pwd=;database=zjx";
  SqlConnection conn = new SqlConnection(sqlstring);
  conn.Open();
  string sql = "Select * from info where id='" + this.textBox1.Text.Trim() + "' and sw='" + this.textBox2.Text.Trim() + "'"; //要执行的 sql 语句
  string sql2 ="Select id from info where id ='" + this.textBox1.Text.Trim() + "'";
              

此时需要一个sqlcommand的类来 解读 这个sql的语句

 SqlCommand cmd = new SqlCommand(sql, conn);

 

如果执行的sql解读不对,可以用 sqlconnection 判断,即打开连接的时候出错,就把他try一下,就是说明用户名密码有问题,直接报messagebox。

此时我加了一个判断,不加应该也可以。

 SqlDataReader dateReader = cmd.ExecuteReader();
                                    
            if (dateReader.Read())
            {
                MessageBox.Show("即将进入画面");
                    timer1.Start();
                    conn.Dispose();
                    conn.Close();

 

 SqlDataReader dateReader = cmd.ExecuteReader(); 意思就是把解读的结果放到datereader这个实例中,下面判断如果读到东西了,更加说明有,即进入系统,因为数据库连接为非托管系统,需要手动释放内存,不加也可以,我不太太清楚后果如何,等学到了在研究内存释放吧。



注册用户:

  string sqlstring = "server=ZJX-PC;uid=sa;pwd=zjx28963436;database=zjx";
            SqlConnection conn = new SqlConnection(sqlstring);
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                conn.Open();
                string sql = " insert into info(id,sw) values ('" + textBox1.Text + "'," + "'" + textBox2.Text + "') "; //要执行的 sql 语句
                string sql2 ="Select id from info where id ='" + this.textBox1.Text.Trim() + "'";
                SqlCommand cmd = new SqlCommand(sql, conn);//同登录
                SqlCommand cmd2 = new SqlCommand(sql2, conn);

跟上面相同的操作,要在数据库字符串中写清想要的功能。

 

 cmd.CommandText = sql;

这行是为了执行sql语句放入储存器中。

接着是

int i = int.Parse(cmd.ExecuteNonQuery().ToString());

 

cmd.ExecuteNonQuery()这个可以返回你执行后受影响的行数,即你插入了用户名密码,执行成功,返回值至少大于0。



防止用户重复:
 bb = cmd2.ExecuteScalar().ToString();

我用ExecuteScalar()这个方法来判断,他的用法是 执行查询,然后返回查询后的结果在第一行第一列,就是只返回一个数据。

我的查询是sql2,意思是查找相同的用户名,如果有相同的,则返回相同用户名的名字,如果没有,则产生null,于是我用try catch 来判断 即实现了功能。

 

 

最后还有一个就是

 Application.DoEvents();

这个功能是为了防止窗口假死,但是处理速度会慢一点,在多循环的时候可以用上。

 

 

 

______________________________________________________________________________________________________________________________________________________________________________________________________

 

2018-3-24 16:59:21 补充

 

 

posted @ 2017-12-06 13:03  无乐不作丶  阅读(133)  评论(0编辑  收藏  举报