我们之前做过VB的机房收费系统,现在要用C#对机房系统进行重构,那VB机房收费系统与C#机房收费系统有什么关联呢?
相同点:
1、机房的运行逻辑是相同的,即对如何上下机,如何计算消费时长的运行思路并没有改变。
2、窗体的布局大体形同。
3、连接数据的方式都为通过创建对象,利用对象的方法进行连接。
不同点:
1、耦合度
VB耦合度较高:一个窗体中的所有功能代码都写在了一个窗体下。
C#耦合度较低:采用七层架构方法来进行数据的传递。
2、面向对象
面向过程:VB更侧重于面向过程的设计
面向对象:C#的重构则侧重于面向对象的设计
3、数据库连接方式
在模块中创建一个方法:VB利用在模块中创建的ExecuteSQL的方法进行连接。
ADO.NET技术:C#中则是通过ADO.NET技术,通过创建连接对象,命令对象的方式来进行连接。
前面的几篇博客中我们介绍了三层,七层则是对三层的更加细化。
今天我们来分享一下另一个不同的地方,数据库的链接方式,ADO.NET技术。ADO.NET技术是如何连接数据库的呢,数据库又是如何传送数据给应用程序的呢,现在我们通过图和代码的方式展示给大家。
代码展示:
1、连接数据库
#region 连接数据库
//1、创建连接字符串(告诉连接哪个服务器,账号密码是什么,查哪个数据表)
//服务器:Data Source=ELSA/SQLS(本机服务器)
//连接的数据库名称:Initial Catalog=charge_sys;
//有的时候改为server=ELSA/SQLS;database=charge_sys;uid=sa;pwd=123456
string constr = @"Data Source=ELSA\SQLS;Initial Catalog=charge_sys;User ID=sa;Password=123456";
//2、创建连接对象
using (SqlConnection conn = new SqlConnection(constr)) //相当于手动调dispose
{
//测试打开连接
//3、打开连接
conn.Open();
Console.WriteLine("打开连接成功");
//4、关闭连接
//conn.dispose()/conn.close()
}
2、向数据库插入一条数据
#region 向数据库中插入一条数据
//1、连接字符串
string constr = @"Data Source=ELSA\SQLS;Initial Catalog=charge_sys;User ID=sa;Password=123456";
//2、创建连接对象
using (SqlConnection con = new SqlConnection(constr))
{
//3、编写sql语句
string sql = "Insert into User_Info values(12,12,'管理员','索隆',12)";
//4、创建一个连接sql语句的对象(命令对象)Sqlcommand,创建的一定要释放,所以用using
using (SqlCommand cmd = new SqlCommand(sql, con)) //参数表示连接语句为sql,连接的哪个对象指定con
{
//5、打开连接
con.Open();
//6、开始执行sql语句
int r = cmd.ExecuteNonQuery();
Console.WriteLine("成功插入了{0}行数据", r);
//cmd.ExecuteNonQuery()这个方法有一个返回值是int类型,表示执行insert,delete,update语句后,所影响的行数。
}
}
#endregion
3、从数据库中删除一条数据
#region 从数据库中删除一条语句
//1、连接字符串
string constr = @"Data Source=ELSA\SQLS;User ID=sa;Password=123456;Initial Catalog=charge_sys;";
//2、创建连接对象
using (SqlConnection con = new SqlConnection(constr))
{
//3、sql语句
string sql = "delete from User_Info where userID=12";
//4、创建SQLCommand对象
SqlCommand cmd = new SqlCommand(sql, con);
//5、打开连接
con.Open();
//6、执行
int r = cmd.ExecuteNonQuery();
Console.WriteLine("成功删除{0}行数据", r);
}
#endregion
4、从数据库中修改一条数据
#region 从数据库中修改一条数据
//1、连接字符串
string constr = @"Data Source=ELSA\SQLS;User ID=sa; Password=123456;Initial Catalog=charge_sys";
//2、创建连接对象
using (SqlConnection con = new SqlConnection(constr))
{
//3、sql语句
string sql = "update User_Info set userID=12,PWD=12 where userID=11";
//4、创建SQLCommand对象
using (SqlCommand cmd = new SqlCommand(sql, con))
{
//5、打开连接
con.Open();
//6、执行
int r = cmd.ExecuteNonQuery();
Console.WriteLine("已成功修改{0}行数据", r);
}
}
5、查询出表的记录条数
#region 查询出表中的记录条数
string constr = @"Data Source=ELSA\SQLS;User ID=sa;Password=123456;Initial Catalog=charge_sys";
using (SqlConnection con = new SqlConnection(constr))
{
string sql = "select count(*) from User_Info";
using (SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
Object count = Convert.ToInt32(cmd.ExecuteScalar());
Console.WriteLine("User_Info表中共有{0}行数据",count);
Console.Read();
}
}
#endregion
6、获取多行数据
static void Main(string[] args) //但凡创建对象都在using里创建,这样我们就不用手动释放了。
{
//1、连接字符串
string constr = @"Data Source =ELSA\SQLS;User ID=sa;Password=123456;Initial Catalog=charge_sys";
//2、建立连接对象
using (SqlConnection con = new SqlConnection(constr))
{
//3、sql语句
string sql = "select * from User_Info";
//4、建立命令对象
using (SqlCommand cmd = new SqlCommand(sql, con))
{ //5、打开数据库
con.Open();
//6、读取数据
using (SqlDataReader reader = cmd.ExecuteReader())
{
//通过reader对象一条一条获取数据
//1、在获取数据之前,先判断本次执行查询后,是否查询到了数据
if(reader.HasRows) //如果有数据,则为true,否则为false
{
//2、如果有数据,那么接下来就要一条一条获取数据
while (reader.Read())
{
//获取当前reader指向的数据
//reader.FieldCount可以获取当前查询语句查询出的列的个数
for (int i = 0; i < reader.FieldCount; i++)
{
//通过reader[]索引器可以使用列名来获取列的值
Console.Write(reader[i]+"|");
}
Console.WriteLine();
}
}
else
{
Console.WriteLine("没有查到任何数据!");
}
}
}
}
Console.Read();
}