ADO.NET入门学习笔记(一)
软件工程专业课ADO.NET的学习笔记。
学习环境: VS2017 + MSSQL2017, 由于目前有台阿里的云服务器,后面会补上服务器下mysql的连接。
ADO.NET是微软对于数据库访问的框架。学校的课程第一课包含一部分内容。首先基于windows下的sql server需要一个命名空间
1 using System.Data.SqlClient;
1,我们首先需要打开数据库。
首先要知道服务器在哪。。。
SqlConnection 类
表示到 SQL Server 数据库的打开连接。 此类不能被继承。
1 SqlConnection conn=new SqlConnection(connString); //构造函数中写服务器信息
关于构造函数(老师只提了前两个)
知道了连接那个服务器后,发起连接,最好能配个sql语句。
SqlCommand 类
表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程。 此类不能被继承。
1 SqlCommand cmd=new SqlCommand(sqlStr,conn); //sqlstr是一个sql语句,conn就是刚刚我们填服务器信息的类。
conn.Open(); //然后就可以打开服务器了。
2,打开服务器后,当然是干活了。我们获取数据用一下几个类。我把他归为两类。
第一类:DataReader是对数据一次性前向只读的数据阅读器, 简单来说类似sql中的游标,读一次就没了。如果要保存用另外的类。
第二类: dataAdapter, 数据适配器, dataSet 数据集, datatable数据表。
下面我们先用第一种方式读取一下数据库的信息。
首先看一眼数据库
1 private void button1_Click(object sender, EventArgs e) 2 { 3 string sqlStr = "select * from Student"; 4 string connString = @"Data Source=DESKTOP-BO0VRVJ;Initial Catalog=StuMS;Integrated Security=True"; 5 SqlConnection conn = new SqlConnection(connString); 6 SqlCommand cmd = new SqlCommand(sqlStr, conn); 7 try 8 { 9 conn.Open(); 10 SqlDataReader dr = cmd.ExecuteReader(); 11 if (dr.HasRows) 12 { 13 while (dr.Read()) 14 { 15 String sno = dr.GetString(0).Trim(); //返回每一行的第i个元素,具体get什么根据数据库的数据类型。Trim是为了去掉空格。 16 String sname = dr.GetString(1).Trim(); 17 String ssex = dr.GetString(2).Trim(); 18 int age = dr.GetInt16(3); 19 String Sdep = dr.GetString(4).Trim(); 20 String str = String.Format("学号[{0}],姓名[{1}],性别[{2}],年龄[{3}],系别[{4}]", sno, sname, ssex, age, Sdep); 21 MessageBox.Show(str); 22 } 23 } 24 25 } 26 catch (Exception ex) 27 { 28 MessageBox.Show(ex.Message); 29 } 30 finally 31 { 32 conn.Close(); 33 } 34 }
一个winform的button点击,连接数据库,我为了简单用MessageBox显示信息。
关于上面的connString不会写没有关系。
VS下菜单工具,连接到数据库,(这个功能我在线安装了800MB左右,安装多久不知道,点个安装去睡觉了)
ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。用于完成insert,delete,update操作。
sqlCommond的对象调用。
在SQL中添加参数,或者用String.Format代替此功能。
//将执行的sql
String sql = "INSERT INTO Car([Title] ,[Speed] ,[Info]) VALUES(@Ttile,@Speed,@Info)"; //创建命令对象,指定要执行sql语句与连接对象conn SqlCommand cmd = new SqlCommand(sql,conn); //指定参数 cmd.Parameters.Add(new SqlParameter("@Ttile", txtTitle.Text)); cmd.Parameters.Add(new SqlParameter("@Speed", txtSpeed.Text)); cmd.Parameters.Add(new SqlParameter("@Info", txtInfo.Text)); //执行,返回影响行数 int rows=cmd.ExecuteNonQuery();
ExecuteScalar ()从数据库检索单个值,返回查询结果集的第一行第一列。主要用于聚集函数。可能返回NULL,返回的是Object类型。
ExecuteReader () 查询用这个。用法在上面代码写过了。
string sqlStr = "select * from Student";
//执行查询返回结果集 SqlDataReader sdr = cmd.ExecuteReader();
测试:如果插入成功,返回输出1.
1 string sqlStr = "insert into Student (sno,sname,ssex,sage,Sdept) values ('6216','cwl','男',22,'cs')"; 2 string connString = @"Data Source=DESKTOP-BO0VRVJ;Initial Catalog=StuMS;Integrated Security=True"; 3 SqlConnection conn = new SqlConnection(connString); 4 SqlCommand cmd = new SqlCommand(sqlStr, conn); 5 conn.Open(); 6 int rows = cmd.ExecuteNonQuery(); 7 MessageBox.Show(rows.ToString());
测试:测试聚集函数
1 string sqlStr = "select count(*) from Student"; 2 string connString = @"Data Source=DESKTOP-BO0VRVJ;Initial Catalog=StuMS;Integrated Security=True"; 3 SqlConnection conn = new SqlConnection(connString); 4 SqlCommand cmd = new SqlCommand(sqlStr, conn); 5 conn.Open(); 6 Object obj = cmd.ExecuteScalar(); //这个函数返回的是Obj, 7 MessageBox.Show(obj.ToString());
另一种方式
SqlDataAdapter da; //数据适配器
DataSet ds = new DataSet("HotelDS"); //DataSet数据集
DataTable dt = new DataTable(); //数据表
详情见下一篇。。。