(一)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)总结
- 创建Connection对象
- 组合sql语句insert, update, delete;
- 创建Command对象,并封装Connection和Sql语句
- 打开连接;
- 执行ExecuteNonQuery() 方法,返回受影响的行数
- 关闭连接
(三)数据操作常见错误总结
1)数据库服务器无法连接
解决办法:
- 检查SQL Server服务是不是已经打开;
- 检查连接字符串server对应服务器名称是不是正确(注意默认实例、命名实例的名称);
- 如果是连接局域网内其他计算机,需要检查防火墙是不是有拦截,或通过“计算机管理”检查;
2)连接字符串中将分号写错
注意: 写错全角的分号,也会出现这样的错误;
解决办法:改为英文半角;
3)数据库登录失败
解决办法:
- 修改数据库名称
4)服务器“登录用户”或者“登录密码”写错
解决办法:
- 修改登录账号名称,或者修改登录密码;
5)连接字符串的关键字写错
解决办法:
- 修改连接字符串对应的关键字;
6)连接对象属性没有赋值
解决办法:
- 只需要将字符串赋值给连接对象即可;
7)command对象的属性没有初始化
解决办法:
- 只需要给SQLCommand两个属性赋值即可;
8)Sql语法错误
要使用可视化工具,观察生成的Sql语句;
9)列名称或者占位符个数错误
当字符串类型的占位符没有加单引号,将会解析为列名;
10)格式转换错误
11)占位符填充不完整
占位符占位符的个数必须要于填入对象个数一致;