ADO.NET——C#

文章目录

  • 1.ADO.NET的组成:
    • 1.1主要有各类对象:
  • 2.具体用法:
    • 1.链接数据库:
      • 1.1 Connection(链接字符串):
        • 1.1.1:基本语法:
        • 1.1.2标准安全连接:
        • 1.1.3 属性与方法:
    • 2.对数据库进行操作——添加:
      • 2.2Command类:
        • 2.2.1用处:
        • 2.2.2方法:
          • ExecuteNonQuery()
      • 2.3拼接字符串(String.Format):
        • 2.3.1代码实例:
        • 2.3.2安全隐患:
    • 3.对数据库进行操作——删除:
      • 3.1代码实例:
    • 4.对数据库进行操作——检索:
      • 4.4检索单列值(ExecuteScalar ()):
    • 5.对数据进行操作——查询:
      • 5.5查询(ExecuteReader):
        • 5.5.1基本认识:
        • 5.5.2查找方法:
        • 5.5.3代码实例:
  • 总结:

此文章并非原创:
来源:张果

1.ADO.NET的组成:

1.1主要有各类对象:

a) SqlConnection → 数据库连接器
b) SqlCommand → 数据库命名对象
c) SqlCommandBuilder → 生存SQL命令
d) SqlDataReader → 数据读取器
e) SqlDataAdapter → 数据适配器,填充DataSet
f) SqlParameter → 为存储过程定义参数
g) SqlTransaction → 数据库事物

2.具体用法:


1.链接数据库:


1.1 Connection(链接字符串):

1.1.1:基本语法:

数据源(Data Source)+数据库名称(Initial Catalog)+用户名(User ID)+密码(Password)

1.1.2标准安全连接:

DataSource=.;InitialCatalog=myDataBase;UserId=myUsername;Password=myPassword; 
OR 
Server=myServerAddress;Database=myDataBase;UserId=myUsername;Password=myPassword;Trusted_Connection=False; 

1.1.3 属性与方法:

Connection对象有两个重要属性:
(1)ConnectionString:表示用于打开 SQL Server 数据库的字符串;
(2)State:表示 Connection 的状态,有Closed和Open两种状态。
Connection对象有两个重要方法:
(1)Open()方法:指示打开数据库;
(2)Close()方法:指示关闭数据库

//创建链接对象
using (SqlConnection conn1 = new SqlConnection("连接字符串"))    
{        
    conn1.Open();       
}
//using 相当于
try{
SqlConnection conn1 = new SqlConnection("链接字符串");
conn1.Open();
}
catch{
conn1.Colse();
}

2.对数据库进行操作——添加:


2.2Command类:

2.2.1用处:

Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。

2.2.2方法:

ExecuteNonQuery()

执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。用于完成insert,delete,update操作。

//新增
        private void btnAdd_Click(object sender, EventArgs e)
        {
            //创建连接对象,并使用using释放(关闭),连接用完后会被自动关闭
             using (SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=sa;database=MyCar"))
            {
                 //打开连接
                conn.Open();
                 //将执行的sql
                String sql = "INSERT INTO Car([Title] ,[Speed] ,[Info]) VALUES('奇瑞' ,190,'国产轿车')";
                 //创建命令对象,指定要执行sql语句与连接对象conn
                SqlCommand cmd = new SqlCommand(sql,conn);
                 //执行,返回影响行数
                int rows=cmd.ExecuteNonQuery();
                if (rows > 0) MessageBox.Show("新增成功!");
            }

            //using 相当如下代码,确保连接对象一定会关闭
            //SqlConnection conn=null;
            //try
            //{
            //    conn=new SqlConnection("server=.;uid=sa;pwd=sa;database=MyCar");
            //}
            //finally
            //{
            //    conn.Close();
            //}
        }

2.3拼接字符串(String.Format):

2.3.1代码实例:

private void btnAdd_Click(object sender, EventArgs e)
        {
            //创建连接对象,并使用using释放(关闭),连接用完后会被自动关闭
             using (SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=sa;database=MyCar"))
            {
                 //打开连接
                conn.Open();
                 //将执行的sql
                String sql =String.Format("INSERT INTO Car([Title] ,[Speed] ,[Info]) VALUES('{0}' ,{1},'{2}')"
                    ,txtTitle.Text,txtSpeed.Text,txtInfo.Text);
				  //String sql = "INSERT INTO Car([Title] ,[Speed] ,[Info]) VALUES('奇瑞' ,190,'国产轿车')";
                 //创建命令对象,指定要执行sql语句与连接对象conn
                SqlCommand cmd = new SqlCommand(sql,conn);
                 //执行,返回影响行数
                int rows=cmd.ExecuteNonQuery();
                if (rows > 0) MessageBox.Show("新增成功!");
            }
        }

2.3.2安全隐患:

如果直接拼接字符串会存在安全隐患,使用参数可以解决问题。

   private void btnAdd_Click(object sender, EventArgs e)
        {
            //创建连接对象,并使用using释放(关闭),连接用完后会被自动关闭
             using (SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=sa;database=MyCar"))
            {
                 //打开连接
                conn.Open();
                 //将执行的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();
                if (rows > 0) MessageBox.Show("新增成功!");
            }
        }

ADO.NET——C#_第1张图片


3.对数据库进行操作——删除:


3.1代码实例:

/// 
        /// 删除
        /// 
        private void btnDelete_Click(object sender, EventArgs e)
        {
            //创建连接对象,并使用using释放(关闭),连接用完后会被自动关闭
            using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=MyCar"))
            {
                //打开连接
                conn.Open();
                //将执行的sql
                String sql = "delete from Car where Title=@Title";
                //创建命令对象,指定要执行sql语句与连接对象conn
                SqlCommand cmd = new SqlCommand(sql, conn);
                //指定参数
                cmd.Parameters.Add(new SqlParameter("@Title", txtTitle.Text));
                //执行,返回影响行数
                int rows = cmd.ExecuteNonQuery();
                MessageBox.Show("删除成功"+rows+"行!");
            }
        }

ADO.NET——C#_第2张图片


4.对数据库进行操作——检索:


4.4检索单列值(ExecuteScalar ()):

ExecuteScalar ()从数据库检索单个值。这个方法主要用于统计操作。ExecuteScalar ()这个方法是针对SQL语句执行的结果是一行一列的结果集,这个方法只返回查询结果集的第一行第一列。

类似于:
ADO.NET——C#_第3张图片

 		/// 
        /// 查询单行单列的值
        /// 
        private void btnScalar_Click(object sender, EventArgs e)
        {
            GetCount();
        }

        private void GetCount()
        {
            //创建连接对象,并使用using释放(关闭),连接用完后会被自动关闭
            using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=MyCar"))
            {
                //打开连接
                conn.Open();
                //将执行的sql
                String sql = "select COUNT(*) from Car";
                //创建命令对象,指定要执行sql语句与连接对象conn
                SqlCommand cmd = new SqlCommand(sql, conn);
                //执行查询返回单行单列的值,Object类型
                Object result = cmd.ExecuteScalar();
                //显示结果到标签
                lblCount.Text = result.ToString();
            }
        }

ADO.NET——C#_第4张图片

对于返回NULL 值时可以用Equals进行判断:

object my = cmd.ExecuteScalar();
if (object.Equals(my,null))  //可以使用Equals进行Null值的判断,易读性强
  Console.WriteLine("Not Data");
else
  Console.WriteLine("Yes"); 

5.对数据进行操作——查询:


5.5查询(ExecuteReader):

5.5.1基本认识:

ExecuteReader用于实现只进只读的高效数据查询。
返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾。

5.5.2查找方法:

一种是基于序号的查找
一个是使用适当的Get方法来查找。因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader 对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号。

5.5.3代码实例:

private void btnQuery_Click(object sender, EventArgs e)
        {
            BindData();
        }

        private void BindData()
        {
            //定义一个集合,用于存放汽车对象
            List cars = new List();

            //创建连接对象,并使用using释放(关闭),连接用完后会被自动关闭
            using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=MyCar"))
            {
                //打开连接
                conn.Open();
                //将执行的sql
                String sql = "select Id,Title,Speed,Info from Car";
                //创建命令对象,指定要执行sql语句与连接对象conn
                SqlCommand cmd = new SqlCommand(sql, conn);
                //执行查询返回结果集
                SqlDataReader sdr = cmd.ExecuteReader();
                //下移游标,读取一行,如果没有数据了则返回false
                while (sdr.Read())
                {
                    //每一行记录表示一辆车,则实例化一个汽车对象
                    Car car = new Car();
                    car.Id = Convert.ToInt32(sdr["Id"]);  //取得数据库中当前行的Id转换成int类型给对象的Id属性赋值
                    car.Title = sdr["Title"] + "";
                    car.Speed = Convert.ToInt32(sdr["Speed"]);
                    car.Info = sdr["Info"] + "";
                    cars.Add(car);  //将汽车对象添加到集合中
                }
                //绑定数据到控件
                dgvCar.DataSource = cars;
                sdr.Close();  //关闭
            }

ADO.NET——C#_第5张图片

总结:

ADO.NET
Connection 链接
Command 操作
ExecuteNonQuery方法
Parameters方法
Add
SqlCommandBuilder生存SQL命令
SqlDataReader数据读取器
SqlDataAdapter数据适配器填充DataSet
SqlParameter为存储过程定义参数
SqlTransaction数据库事物

你可能感兴趣的:(C#)