C# ADO.NET与面向对象
软件开发的三层:界面层,业务逻辑层,数据访问层;
数据访问层:项目添加App_Code文件夹;
实体类:根据数据库表结构,类名和数据库表名一致;
每个成员变量要与数据库表的列相对应,对象正好可以列为一行数据,封装起来;
一个实体类做一个类;
访问权限是public的
数据访问类:起名UsersData;
访问权限是public的
实体类和数据访问类统称为数据访问层,每个表对应一个数据访问层;
新建一个连接字符串的静态的类:
访问权限是public的,必须有一个静态的成员变量,然后封装;
连接字符串:成员变量 = "server =.; Database =Data0908; user =sa; pwd =123;";
在数据访问操作的方法:在数据访问类的构造函数内,可以直接用连接字符串的类名点出来;
在构造函数内可以直接连接数据库:
SqlConnection conn = new SqlConnection();
SqlCommend comm = conn.CreateCommand();
*****写法:
由于构造函数的约束性,可以提升数据库连接类和数据库操作类的作用域:
private SqlConnection conn;
private SqlCommend comm;
public UsersData
{
conn = new SqlConnection(连接字符串的类名.连接字符串的成员变量);
comm = conn.CreateCommand;
}
//返回表中的所有数据
public List <Users> selectAll()
{
List <Users> us = new List<Users>(); //新建一个泛型集合
comm.CommandText = "select * from Users";
conn.Open();
SqlDataReader dr = comm.ExeuteReader();
return us;
}
while(dr.Read()) //如果dr.Read是true进循环;
{
Users u = new Users;
u.Ids = Convert.ToInt32(dr[Ids]);
u.UserName = dr[UserName].ToString();
u.password = dr[password].ToString();
u.NickName = dr[NickName].ToString();
u.Sex = Convert.ToBoolean(dr[Sex]);
u.Birthday = Convert.ToDateTime(dr[Birthday]);
u.NationCold = dr[NationCold].ToString();
us.Add(u);
}
conn.Close();
return us;
}
foreach(Users u in ulist)
{
Console.WriteLine(u.Ids+" | "+u.password);
}
添加:
public bool UsersTianJia(users u)
{
bool result = false; //默认结果false;
cmd.CommandText = "insert into Users values(@a,@b,@c,@d,@e,@f)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@a", u.UserName);
cmd.Parameters.AddWithValue("@b", u.PassWord);
cmd.Parameters.AddWithValue("@c", u.NickName);
cmd.Parameters.AddWithValue("@d", u.Sex);
cmd.Parameters.AddWithValue("@e", u.Birthday);
cmd.Parameters.AddWithValue("@f", u.NationCode);
conn.Open();
int a = comm.ExcuteNonQuery();
conn.Close();
if(a>0)
result = true;
return result;
}
Users user = new Users();
Console.WriteLine("请输入用户名");
user.UserName = Console.ReadLine();