ADO.NET_C#数据库访问初步认识
1.ADO.NET:翻译成中文就是C#给我们封装好的访问数据库的方法和步骤,通过他就可以在c#中对数据库的增删改查一系列操作。
2.ADO.NET的组成:一共分成了两个部分。
(1)DateSet数据集:相当于一个临时数据库;断开式链接的方式:把数据库数据取到数据集里面,至于数据集和数据库是否链接不必在关心。
(2).Net Framework:操作数据库数据的一个核心,(增删改查)操作;只读只进方式:想对数据库进行操作,就必须链接数据库。
3..Net Framework中的四个核心对象
(1)SqlConnection:负责链接数据库,通过创建SqlConnection对象实现数据库的链接
A.创建链接对象-----SqlConnection 对象名 = new SqlConnection("server=.表示本地服务器名;database=数据库名;uid=登录名;pwd=密码;");
B.打开数据库-------对象名.Open();
C.关闭数据库-------对象名.Close();
(2)SqlCommand:负责给数据库发送sql语句去执行操作。SqlCommand 对象名 = new SqlCommand("需要发送的增删改查slq语句",连接数据库的对象名);
A.另外一种发送方式:
a.创建对象---SqlCommand 对象名 = new SqlCommand();
b.设置执行的sql语句-----对象名.CommandText="需要执行的sql语句";
c.设置数据库连接对象----对象名.Connection="连接数据库的对象名";
B.对象名.ExecuteScalar();----执行查询,得到单行单列,就是查询结果中第一行第一列的值,返回值的类型:Object
C.对象名.ExecuteNonQuery();--执行(增删改)操作,返回受影响行数。返回值类型:int
D.对象名.ExecuteReader();----执行查询,得到多行多列的值,返回值类型是结果集:SqlDataReader
(3)SqlDataReader:负责保存多行多列的查询结果
A.通过声明SqlDataReader对象来实现查询结果的保存和访问:SqlDataReader 对象名 = .....;
B.对象名.Read();---每次调用.Read()方法,查询到一行数据结果,如果当前行有数据返回true,没有数据则返回false,变成后指针会移动到下一行的开始。
C.对象名["列名"]---得到当前指针指向的行中的某一个对应列名的值 或 对象名[索引下标值] 也可以得到 ,下标0开始表示第一个列名
(4)SqlDataAdapter:负责给数据集DataSet提供数据。称为临时数据库:Tables表集合:Tables[0]得到第一张表,Tables["表名"]得到表名的表,Rows行集合,Columns列集合。
A.创建对象----SqlDataAdapter 对象名 = new SqlDataAdapter("需要发送的查询的slq语句",连接数据库的对象名);
B.给数据集DataSet填充数据---对象名.Fill();
DataSet的构成:DataSet数据集,临时表;Tables:表集合;Rows:行集合;Columns:列集合; //创建一个数据集 DataSet ds = new DataSet(); //创建一个表 DataTable dt1 = new DataTable("userInfo"); //创建列 DataColumn c1 = new DataColumn("ID",typeof(int)); DataColumn c2 = new DataColumn("Name",typeof(string)); //将列添加到表格中 dt1.Columns.Add(c1); dt1.Columns.Add(c2); //创建数据行 DataRow dr1 = dt1.NewRow(); dr1["ID"] = 1; dr1["Name"] = "张三"; DataRow dr2 = dt1.NewRow(); dr1["ID"] = 2; dr1["Name"] = "李四"; //将行添加到表里 dt1.Rows.Add(dr1); dt1.Rows.Add(dr2); //将表添加到数据集里 ds.Tables.Add(dt1); //绑定到控件中 this.dgvInfo.DataSource = ds.Tables["userInfo"];
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4.通过c#查询数据库单行单列的操作步骤
(1)导入命名空间链接数据库SqlConnection对象所在的命名空间:using System.Data.SqlClient;
(2)创建数据库链接对象:SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=登录名;pwd=密码;");
(3)打开数据库:conn.Open();
(4)定义变量存放sql语句:string sql = "一条查询的slq语句";
(5)创建数据库操作对象:SqlCommand comm = new SqlCommand(sql,conn);
(6)调用方法,执行sql保存返回值:object obj = comm.ExecuteScalar();
(7)处理方法的返回值:控件名.属性名 = obj;
(8)关闭数据库释放空间:conn.Close();
/// <summary> /// 查询单行单列,根据姓名查询年龄 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("server=.;database=Oc;uid=sa;pwd=123456");//链接数据库 conn.Open(); var sql = string.Format("select age from userinfo where name='{0}'", textBox5.Text); //Format【格式的意思】Parse解析,类型类型转化 SqlCommand comm = new SqlCommand(sql, conn);//把sql语句发送给数据库, object obj = comm.ExecuteScalar(); //调用方法,查询单行单列返回的是object类型 textBox6.Text = obj + ""; //显示数据;这种方法转成字符串类型或者用 变量名.ToString(); conn.Close(); }
5.通过c#属性数据库的(增删改)操作
(1)导入命名空间链接数据库SqlConnection对象所在的命名空间:using System.Data.SqlClient;
(2)创建数据库链接对象:SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=登录名;pwd=密码;");
(3)打开数据库:conn.Open();
(4)定义变量存放sql语句:string sql = "一条需要执行增删改的slq语句";
(5)创建数据库操作对象:SqlCommand comm = new SqlCommand(sql,conn);
(6)调用方法,执行sql保存返回值:int count = comm.ExecuteNonQuery();
(7)处理方法的返回值:if(count>0){...成功...}else{...失败...}
(8)关闭数据库释放空间:conn.Close();
/// <summary> /// 添加 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("server=.;database=Oc;uid=sa;pwd=123456");//链接数据库 conn.Open(); var sql = string.Format("insert into userinfo values('{0}','{1}',{2})", textBox2.Text, textBox3.Text, textBox4.Text); //Format【格式的意思】Parse解析,类型类型转化 SqlCommand comm = new SqlCommand(sql, conn);//把sql语句发送给数据库, int row = comm.ExecuteNonQuery(); //调用方法,返回int,受影响的行数 if (row == 1) { MessageBox.Show("添加成功"); } else { MessageBox.Show("添加失败"); } conn.Close(); }
6.通过c#查询数据库多行多列的操作步骤
(1)导入命名空间链接数据库SqlConnection对象所在的命名空间:using System.Data.SqlClient;
(2)创建数据库链接对象:SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=登录名;pwd=密码;");
(3)打开数据库:conn.Open();
(4)定义变量存放sql语句:string sql = "一条查询的slq语句";
(5)创建数据库操作对象:SqlCommand comm = new SqlCommand(sql,conn);
(6)调用方法,执行sql保存返回值:SqlDataReader dr = comm.ExecuteReader();
(7)处理方法的返回值:if/while(dr.Read()){ 控件名.属性名 = dr["列名"].ToString();}
(8)关闭SqlDataReader对象:dr.Close();
(9)关闭数据库释放空间:conn.Close();
public void sjk() { SqlConnection conn = new SqlConnection("server=.;database=Oc;uid=sa;pwd=123456");//链接数据库 conn.Open();//打开数据库 var sql = "select * from userinfo"; SqlCommand comm = new SqlCommand(sql, conn);//负责执行数据库操作,把sql语句发送给数据库 //用SqlDataReader对象来存放数据结果,他提供了read()方法获取数据库指针,每次调用read()方法,查询到行数据,指针会自动向下移动一行,继续查询, SqlDataReader reader = comm.ExecuteReader(); //存放的是SqlCommand提供的ExecuteReader方法 if (reader.Read())//Read【识别,阅读到,查阅到】如果查阅到数据,该方法会返回一个true或false值,来表示指针指向当前行中是否有数据; { textBox1.Text = reader["id"].ToString(); //SqlDataReader还提供了 对象名["列名"]--得到指针指向这行某个列的值 textBox2.Text = reader[1].ToString();//或者是列的编号,比如这里可以写reader[1].ToString(); textBox3.Text = reader["sex"].ToString(); textBox4.Text = reader["age"].ToString(); listBox1.Items.Add(reader["name"].ToString());//由于下一个reader.Read()从下一个读取,所以这里要加一句第一条数据 } while (reader.Read()) { listBox1.Items.Add(reader["name"].ToString()); } reader.Close();//关闭对象,不关闭这些对象,在后面打开会被占用; 关闭是释放空间 conn.Close();//关闭数据库 }
7.给DataGridView控件添加数据的一个步骤:他需要用到临时数据库的基本结构【DateSet】
(1)导入命名空间链接数据库SqlConnection对象所在的命名空间:using System.Data.SqlClient;
(2)创建数据库链接对象:SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=登录名;pwd=密码;");//由于是断开式链接就不需要调用Open和Close两个方法了
(4)定义变量存放sql语句:string sql = "需要发送的slq语句";
(5)创建适配器对象:SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
(6)创建数据集对象:DateSet ds = new DateSet();
(7)调用方法,给数据集填充数据:sda.Fill(ds,"取临时表名");
(8)将数据显示到控件:控件名.DataScourse = ds.Tables["表名/索引值"]
public void Datagridview() { SqlConnection conn = new SqlConnection("server=.;database=Oc;uid=sa;pwd=123456");//链接数据库 var sql = "select * from userinfo"; SqlDataAdapter sda = new SqlDataAdapter(sql, conn);//创建配置器对象,负责记载数据到DataSet,负责给数据集DataSet提供数据的 DataSet ds = new DataSet();//创建数据集对象,作用是临时数据库,断开式访问数据库,表集合:Tables[0]得到第一个表,Tables["userinfo1"]得到表名的表 sda.Fill(ds, "userinfo1"); //调用Fill方法负责给数据集DataSet提供数据,临时数据库那么这里就是添加临时表的意思 dataGridView1.DataSource = ds.Tables["userinfo1"]; //数据绑定给控件 conn.Close(); }
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------