其他分享
首页 > 其他分享> > ADO.NET数据访问技术

ADO.NET数据访问技术

作者:互联网

ADO.NET数据访问技术

学习目标

  1. 掌握C#访问数据库的基本方法
  2. 掌握数据库查询的各种方法
  3. 重点理解和掌握OOP原则在数据访问中的应用

ADO.NET组件与数据库连接

理解ADO.NET

主要组件

‎用于访问和操作数据的 ADO.NET 的两个主要组件是 .NET Framework 数据提供程序和‎‎DataSet‎‎。‎

.NET Framework 数据提供程序类型

连接数据库的准备

  1. 启用TCP/IP
  2. 修改端口号
  3. 重启服务后生效

如何正确连接数据库

Connection对象

数据库增、删、改方法的编写

Command对象

using System;
// 引入命名空间
using System.Data;
using System.Data.SqlClient;


namespace ADOConnectSql
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 定义连接字符串
            // string connStrings = "Server=.;Database=StudentsManageDB;UID=sa;PWD=sqlpassword";
            string connStrings = "Data Source=; Initial Catalog=StudentManageDB;Integrated Security=True";

            // 创建连接对象
            SqlConnection sqlConnection = new SqlConnection(connStrings);
            // 打开连接
            try
            {
                sqlConnection.Open();
                if (ConnectionState.Open == sqlConnection.State)
                {
                    // Console.WriteLine("Connection is opened");
                    // 连接成功,执行SQL语句
                    string sqlString = @"insert into Students(StudentName,Gender,Birthday,StudentIdNo,Age,PhoneNumber,StudentAddress,ClassId)";
                    sqlString += "values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}')";
                    sqlString = string.Format(sqlString, "张三", "男", "1990-09-01", 413302198730289090, 20, "12972782727", "北京", 1);
                    // 创建Command对象
                    /*SqlCommand sqlCommand = new SqlCommand();
                    sqlCommand.CommandText = sqlString;*/
                    SqlCommand sqlCommand = new SqlCommand(sqlString, sqlConnection);

                    int result = sqlCommand.ExecuteNonQuery();

                    Console.WriteLine(result);
                }
                else
                {
                    Console.WriteLine("Connection is filed");
                }
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
            }
            
            // 关闭连接
            sqlConnection.Close();
            if (ConnectionState.Closed == sqlConnection.State)
            {
                Console.WriteLine("Connection is Closed");
            }
            Console.ReadLine();
        }
    }
}

修改实体

// 修改实体
string updateString = @"update Students set StudentName='{0}' where StudentId={1}";
updateString = string.Format(updateString,"钱七", 100005);
result = new SqlCommand(updateString, sqlConnection).ExecuteNonQuery();

获得标识列的值

数据查询方法

返回单一结果查询

单一结果查询步骤总结

  1. 创建Connection对象
  2. 组合SQL语句:select单一结果查询
  3. 创建Command对象,并封装Connection和SQL语句
  4. 打开连接
  5. 执行ExecuteScalar()方法,返回单一结果(object类型)
  6. 关闭连接

返回只读数据集的查询

string sql = "select StudentId,StudentName from Students;select ClassId,ClassName from StudentClass;";
SqlDataReader result = new SqlCommand(sql, sqlConnection).ExecuteReader();
// 读取第一个结果集
while (result.Read())
{
    Console.WriteLine(result["StudentId"].ToString()+ result["StudentName"].ToString());
}
Console.WriteLine("---------------------------");
// 判断是否下一个结果集
if (result.NextResult())
{
    while (result.Read())
    {
        Console.WriteLine(result["ClassId"].ToString() + result["ClassName"].ToString());

    }
}

基于OOP原则优化数据库访问

实现代码复用

实体类在开发中的应用

方法参数的问题与解决

实体类的设计

数据查询与对象封装

封装和解析对象的意义

多个同类型对象的封装

public static List<Student> GetAllStudents()
{
    string sqlString = "select StudentName,Gender,Birthday,StudentIdNo,Age,PhoneNumber,StudentAddress,ClassId from Students";
    // 执行查询
    SqlDataReader objReader = SQLHelper.GetReaderResult(sqlString);
    List<Student> stuList = new List<Student>();
    while (objReader.Read())
    {
        // 将对象添加到集合
        stuList.Add(new Student(){
            StudentName = objReader["StudentName"].ToString(),
            Gender = objReader["Gender"].ToString(),
            Birthday = Convert.ToDateTime(objReader["Birthday"]),
            StudentIdNo = Convert.ToDecimal(objReader["StudentIdNo"]),
            Age = Convert.ToInt16(objReader["Age"]),
            PhoneNumber = objReader["PhoneNumber"].ToString(),
            StudentAddress = objReader["StudentAddress"].ToString(),
        });
    }
    // 关闭读取器
    objReader.Close();
    // 返回对象集合
    return stuList;
}

调用数据访问方法

// 调用数据访问方法获取学员对象
List<Student> listStudent= StudentService.GetAllStudents();
if (listStudent.Count != 0)
{
    Console.WriteLine("姓名" + "\t" + "班级" + "\t" + "年龄" + "\t" + "生日" + "\t" + "电话");
    foreach (Student item in listStudent) // 解析对象
    {
        Console.WriteLine(item.StudentName + "\t" + item.ClassId + "\t" + item.Age + "\t" + item.Birthday.ToShortDateString() + "\t" + item.PhoneNumber);
    }
}
else
{
    Console.WriteLine("没有要显示的数据!");
}

组合扩展实体的应用

namespace ADOConnectSql
{
    /// <summary>
    /// 组合扩展实体
    /// </summary>
    public class StudentExt
    {
        public StudentExt()
        {
            objStudent = new Student();
            objScore = new ScoreList();
            objClass = new StudentClass();
        }
        public Student objStudent { get; set; }
        public StudentClass objClass { get; set; }
        public ScoreList objScore { get; set; }
    }
}	

面向对象查询总结

graph TB A[面向对象查询] B[单对象查询] C[同类型多对象查询] D[不同类型多对象查询] A-->B A-->C A-->D E[对象独立封装] B-->E F[使用List<T>泛型集合封装] C-->F D-->F G["一般"实体封装] H["组合"扩展实体封装] I["简单"扩展实体封装] F-->G F-->H F-->I

标签:Console,string,对象,数据库,封装,查询,访问,ADO,NET
来源: https://www.cnblogs.com/holychan/p/15759662.html