ADO.NET数据访问技术----【ADO.NET数据访问技术基础及错误总结】

(一)ADO.NET组件与数据库连接

1)管理信息系统(MIS)部署方案

<1> 完整的应用程序包括客户端和数据库服务端

在这里插入图片描述

<2>理解ADO.NET
  • ActiveX Data objects (ADO)
  • 是.NET平台下应用程序和数据源进行交互的一组面向对象类库
  • 即:数据访问组件

2)ADO.NET主要组件

主要包含两部分:
  • .NET 数据提供程序:用于连接到数据库、执行命令和检索结果;
  • Dateset(内存数据集)独立于任何数据源,不必直接和数据库交互;
    在这里插入图片描述

.NET数据提供程序类型

<1> .NET Framework数据提供程序
  • SQL Server 数据库 ----> System.Data.SqlClient 命名空间;
  • Access、Excel或SQL Server 数据源(低版本) ----> System.Data.OleDb 命名空间;
  • Oracle数据库 ----> System.Data.OracleClient 命名空间(需要添加引用)
  • ODBC公开数据源 ----> System.Data.Odbc 命名空间(很少使用)
<2> 第三方提供的数据提供程序: MySql.NET 数据提供程序【需要单独下载dll文件】

3)连接数据库的准备工作

<1> SQL Server 服务器端口查看与修改
  • 搜索【SQL Server 配置管理器】,打开,启用TCP/IP 协议
    在这里插入图片描述
  • 重新启动SQL 服务
    在这里插入图片描述

4)正确连接数据库

<1> 四个条件:服务器IP地址、数据库名称、登录账号、登录密码

在这里插入图片描述

<2> 账号的使用
  • sa账号拥有访问数据库的所有权限,主要用于学习和开发测试阶段;

5)Connection对象

<1> 基础
  • 作用:建立应用程序和数据库的点对点连接;
    在这里插入图片描述
  • 属性:ConnectionString(连接字符串)
    • 封装连接数据库的四个条件;
    • Server = 服务器名称或IP地址;DataBase = 数据库名称;UserID = 登录账号; Password = 登录密码
    • 使用SQL Server用户验证登录的字符串示例(经常使用)
      在这里插入图片描述
    • 使用windows集成验证登录的字符串示例(仅限于本机)
      在这里插入图片描述
  • 方法:
    • Open(); 打开连接
    • Close(); 关闭连接;
<2> 代码编写与分析:连接数据库

在这里插入图片描述

<3> 关于连接字符串的特别说明

在这里插入图片描述

注意:
  • 数据库命名实例要写完整;

(二)数据库增删改方法的编写

1)command对象

<1> 作用:向数据库发送SQL语句
  • 封装“连接对象”和要执行的“SQL语句”;
  • 对数据库执行具体的操作,提供“增、删、改、查”的方法;
<2> 属性
  • CommandText:需要封装Sql语句或储存过程名称;
  • Connection:Command对象使用的数据库连接对象;
<3> 方法:
  • ExecuteNonQuery(); 执行增删改操作
  • ExecuteScalar(); 返回单一结果的查询
  • ExecuteReader(); 返回只读数据列表的查询
<4> ExecuteNonQuery()方法使用要点:
  • 执行insert、update、 delete类型的语句;
  • 执行后返回受影响的行数,一般是大于0的整数,等于零说明没有影响,-1表示 执行出错

2)举例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace ADO.NETDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //定义连接字符串的方法
            string connString = "Server=.;DataBase=StudentManageDB;UserID=sa;Pwd=146836";
            //创建连接对象
            SqlConnection conn = new SqlConnection(connString);
            
            //编写SQL语句
            string sql = "insert into Studetns(StudentName, Gender, Birthday, StudentIdNo, Age, PhoneNumber, StudentAdress, ClassId)";
            sql += "values('{0},'{1}',,'{2}',{3},{4},'{5}','{6}','{7}')";
            sql = string.Format(sql, "guo", "男", "1990-01-01", 123456789987654321, 25, "12589746523", "天津", 1);

            //创建Command对象
            SqlCommand cmd = new SqlCommand(sql, conn);

            //打开连接
            conn.Open();
            //执行操作
            int result = cmd.ExecuteNonQuery();
            //关闭连接
            conn.Close();

            if(result==1)
            {
                Console.WriteLine("添加成功!");
            }
            else
            {
                Console.WriteLine("添加失败!");
            }
        }
    }
}

  • 注意:当sql语句出现问题,需要在SQL语句的位置设置断点,找到生成的sql语句【文本可视化工具中】,可以拿到数据库中调试
  • 修改和删除实体,只需要在上述代码中修改【编写SQL语句】的部分;

3)提交多条SQL语句

多条SQL语句之间使用分号进行分割;
在这里插入图片描述

4)获取标识列的值

@@identity是数据库中的一个全局变量,保存着最近一次生成的标识列的值
在这里插入图片描述

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace ADO.NETDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //定义连接字符串的方法
            string connString = "Server=.;DataBase=StudentManageDB;UiD=sa;Pwd=146836";
            //创建连接对象
            SqlConnection conn = new SqlConnection(connString);
            
            //编写SQL语句
            string sql = "insert into Studetns(StudentName, Gender, Birthday, StudentIdNo, Age, PhoneNumber, StudentAdress, ClassId)";
            sql += "values('{0},'{1}',,'{2}',{3},{4},'{5}','{6}','{7}');select @@identity";
            sql = string.Format(sql, "guo", "男", "1990-01-01", 123456785987654321, 25, "12589746523", "天津", 1);
    
            //创建Command对象
            SqlCommand cmd = new SqlCommand(sql, conn);

            //打开连接
            conn.Open();
            //执行操作
            object result = cmd.ExecuteScalar();
            //关闭连接
            conn.Close();
        }
    }
}

5)总结

  1. 创建Connection对象
  2. 组合sql语句insert, update, delete;
  3. 创建Command对象,并封装Connection和Sql语句
  4. 打开连接;
  5. 执行ExecuteNonQuery() 方法,返回受影响的行数
  6. 关闭连接

(三)数据操作常见错误总结

1)数据库服务器无法连接

在这里插入图片描述

解决办法:
  • 检查SQL Server服务是不是已经打开;
  • 检查连接字符串server对应服务器名称是不是正确(注意默认实例、命名实例的名称);
  • 如果是连接局域网内其他计算机,需要检查防火墙是不是有拦截,或通过“计算机管理”检查;

2)连接字符串中将分号写错

在这里插入图片描述

注意: 写错全角的分号,也会出现这样的错误;
解决办法:改为英文半角;

3)数据库登录失败

在这里插入图片描述

解决办法:
  • 修改数据库名称

4)服务器“登录用户”或者“登录密码”写错

在这里插入图片描述

解决办法:
  • 修改登录账号名称,或者修改登录密码;

5)连接字符串的关键字写错

在这里插入图片描述

解决办法:
  • 修改连接字符串对应的关键字;

6)连接对象属性没有赋值

在这里插入图片描述

解决办法:
  • 只需要将字符串赋值给连接对象即可;

7)command对象的属性没有初始化

在这里插入图片描述

解决办法:
  • 只需要给SQLCommand两个属性赋值即可;

8)Sql语法错误

要使用可视化工具,观察生成的Sql语句;

在这里插入图片描述

9)列名称或者占位符个数错误

当字符串类型的占位符没有加单引号,将会解析为列名;

在这里插入图片描述

10)格式转换错误

在这里插入图片描述

11)占位符填充不完整

占位符占位符的个数必须要于填入对象个数一致;

在这里插入图片描述

12)占位符中将大写括号写成中括号

在这里插入图片描述

发布了66 篇原创文章 · 获赞 2 · 访问量 6661

猜你喜欢

转载自blog.csdn.net/forever_008/article/details/104253775