目录
一、SQLConnection 连接数据库
二、SqlCommand 数据库操作
三、SQLDataReader:从数据库中获取数据
四、练习:通过数据库登录、注册、修改密码
Ado.net : 在程序中,通过Ado.net访问数据库
(水管子) 负责连接数据库
ConnectionString:连接字符串 指定你想连接哪个数据库(服务器名称),连接的用户名和密码。
open():打开数据库连接
close():关闭数据库连接
建立连接步骤:
1) 添加命名空间:using System.Data.SqlClient; //添加对Ado.net命名空间的引用
2)创建连接字符串
3)实例化数据库连接对象,将连接字符串属性赋值成步骤2的字符串
4)打开数据库连接 Open()
5)关闭数据库连接: Close()
数据库上做操作,比如说增、删、改、查
属性:
1)Connection:数据库连接对象,也就是上一步创建的连接对象
2)CommandText:要让数据库做什么,通过这个属性赋值。将要执行的sql语句赋值给该对象
方法:
1)ExecuteNonQuery():如果执行增(insert)、删(delete)、改(update),返回-1表示执行失败,非-1的值表示执行成功.
如果执行查询(select),返回值无意义。
2 ) ExecuteReader() : 执行查询语句,返回DataReader对象。
3)ExecuteScalar() : 执行查询语句,只能返回单个查询结果。返回第一行、第一列的值
登录功能步骤:
using System.Data.SqlClient; //1、添加命名空间
namespace LoginForm
{
public partial class Form1 : Form
{
//2、创建数据库连接字符串
string strCon = "data source=.;database=ttt;user id=sa;pwd=admin123";
public Form1()
{
InitializeComponent();
}
//登录
private void button1_Click(object sender, EventArgs e)
{
//3、实例化数据库连接对象
SqlConnection con = new SqlConnection(strCon);
//4、打开数据库连接
con.Open();
//5、创建SqlCommand对象
SqlCommand cmd = new SqlCommand();
//6、将Connection对象赋值给它
cmd.Connection = con;
//7、编写sql语句,将sql语句赋值给CommandText属性
string userName = textBox1.Text.Trim(); //用户名
string pwd = textBox2.Text.Trim(); //密码
string sql = string.Format("select COUNT(*) from Users where loginId='{0}' and loginPwd='{1}'",userName,pwd);
cmd.CommandText = sql;
//8、调用方法,执行Command命令
object b= cmd.ExecuteScalar();
int n = (int)b; //强制转换成整数
if (n > 0) //账号密码正确
{
Form2 frm = new Form2();
frm.ShowDialog();
}
else
{
MessageBox.Show("账号或密码错误,请重新输入!");
}
//9、关闭数据库连接
con.Close();
}
}
}
属性:
HasRows:是否返回了查询结果,如果返回,则为true;否则为false。
FieldCount : 当前行中的列数
方法:
Read():从数据库中读取数据,一次只能读取一行,如果读取成功,返回true;失败,返回false。
Close():关闭该对象
eg:读取数据库信息显示到datagrideview中:
public partial class main : Form
{
///
/// 2、数据库连接字符串
///
string strCon = Common.connStr;
//书籍集合,存储所有书籍信息
List lstB = new List();
public main()
{
InitializeComponent();
}
private void btnRead_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(strCon);
con.Open();
string sql = string.Format("select * From Bookstore");
SqlCommand cmd = new SqlCommand(sql,con);
//调用方法,执行Command命令,返回Reader对象
SqlDataReader reader = cmd.ExecuteReader();
//判断是否读取到了数据
if (reader.HasRows)
{
//循环接收读取到的数据
while (reader.Read())
{
//获取每一列的值
int id = (int)reader["bookID"];
string name = reader["bookName"].ToString();
string author = reader["Author"].ToString();
string category = reader["Category"].ToString();
string intro = reader["Intro"].ToString();
string imgPath = reader["imgPath"].ToString();
string txtPath = reader["txtPath"].ToString();
double price = (double)reader["Price"];
//实例化一个类对象,存储该行数据
Book b = new Book(id, name, author, category, intro, imgPath, txtPath, price);
//将该类对象添加到集合中
lstB.Add(b);
}
//为DataGridView赋数据源
dataGridView1.DataSource = lstB;
}
//关闭DataReader对象
//关闭数据库连接
reader.Close();
con.Close();
}
}
要求:创建一个用户名、密码的登录窗体,从数据库中读取出账号、密码进行校验,校验成功,进行登录;
添加一个账号注册界面,将注册账号存入数据库中(不允许添加数据库中已有账号,需要进行判断);
添加一个修改密码界面,要求:先输入旧密码,密码输入正确才能进行修改,修改以后,更新到数据库中
1.登录:见上文
2.注册:
注:Common.connStr为ConnectionString连接字符串
纠错!!
if (username == "" || pwd == "" || pwd2 == "")
{
MessageBox.Show("用户名或密码不能为空!");
}
不能用null!
public partial class Register : Form
{
public Register()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
string username = txtBoxUser.Text.Trim();
string pwd = txtBoxPwd.Text.Trim();
string pwd2 = txtBoxPwd2.Text.Trim();
string strSql = string.Format("select userName from USers where userName='{0}'", username);
string strSqlAdd = string.Format("insert into Users(userName,Password) values('{0}', '{1}') ", username, pwd);
using (SqlConnection conn = new SqlConnection(Common.connStr))
{
using (SqlCommand cmd = new SqlCommand(strSql, conn))
{
conn.Open();
//object reName = cmd.ExecuteScalar();
//string reNameStr = reName.ToString();
SqlDataReader reader = cmd.ExecuteReader();
if (username == null || pwd == null || pwd2 == null)
{
MessageBox.Show("用户名或密码不能为空!");
}
else if (reader.HasRows)
{
MessageBox.Show("用户名已存在!");
}
else if (pwd != pwd2)
{
MessageBox.Show("两次密码输入不一致!");
}
else
{
reader.Close();
cmd.CommandText = strSqlAdd;
int x = cmd.ExecuteNonQuery();
if (x != -1)
{
MessageBox.Show("注册成功!");
}
else
{
MessageBox.Show("注册失败!");
}
}
reader.Close();
}
conn.Close();
}
}
catch (Exception)
{
MessageBox.Show("出现异常");
}
}
}
3.修改密码:
public partial class ChangePwd : Form
{
public ChangePwd()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string username = txtBoxUser.Text.Trim();
string pwdOld = txtBoxPwd3.Text.Trim();
string pwd = txtBoxPwd.Text.Trim();
string pwd2 = txtBoxPwd2.Text.Trim();
string strSql = string.Format("select userName from USers where userName='{0}'", username);
string strSqlPwd = string.Format("select Password from USers where userName='{0}'", username);
string strSqlUpdate = string.Format("update Users set Password='{0}' where userName='{1}' ", pwd , username);
using (SqlConnection conn = new SqlConnection(Common.connStr))
{
using (SqlCommand cmd = new SqlCommand(strSql, conn))
{
conn.Open();
//object reName = cmd.ExecuteScalar();
//string reNameStr = reName.ToString();
SqlDataReader reader = cmd.ExecuteReader();
if (username == null || pwdOld == null || pwd == null || pwd2 == null)
{
MessageBox.Show("用户名或密码不能为空!");
}
else if (reader.HasRows)//用户名存在
{
reader.Close();
cmd.CommandText = strSqlPwd;
//object b = cmd.ExecuteScalar();
//string rePwd = b.ToString();
if (pwdOld != cmd.ExecuteScalar().ToString())
{
MessageBox.Show("原密码输入错误!");
}
else if (pwd != pwd2)
{
MessageBox.Show("两次密码输入不一致!");
}
else
{
cmd.CommandText = strSqlUpdate;
int x = cmd.ExecuteNonQuery();
if (x != -1)
{
MessageBox.Show("密码修改成功!");
}
else
{
MessageBox.Show("密码修改失败!");
}
}
}
else
{
MessageBox.Show("用户名不存在!");
}
reader.Close();
}
conn.Close();
}
}
}