接着上一条随笔。
这个用户管理系统能够实现从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 补充