【资料整理】ADO.NET

ADO.NET:
1.SYSTEM.DATA 命名空间下类的集合的统称,用于操作 连接数据库的 它提供了统一的编程接口,可以操作不同的数据库
数据库实例:默认实例(MSSQLSEVER)和命名实例(MYSQLSERVER)如果不写实例名称就会去连接默认实例,如果要连接命名实例,就必须写上命名实例的名称 用于区分同一台电脑上的不同数据库软件
端口:每一种对外提供的服务都提供端口web:80 sqlserver:1433
Server=127.0.0.1 本机
Connection 连接通道
a.目的
b.账户密码
c.门牌号
string connSTR="Server=127.0.0.1;DaTaBaSe=ItCast;Uid=sa;Pwd=12345"
string connSTR="Server=.;DaTaBaSe=ItCast;Uid=sa;Pwd=12345"
//SqlConnectionStringBuilder scsb=new SqlConnectionStringBuilder ();
//scsb.DataSource=".";//指定服务器地址
//scsb.IntegratedSecurity=true;//使用windows身份验证
//scsb.InitialCatalog="Itcast";//指定要连接的数据库
string connStr="Data Source=.;Initial catalog=数据库名;integrated Security=true";
1)创建一个连接通道
SqlConnection conn=new SqlConnectin ();
//指定连接通道的连接字符串
conn.ConnectionString=connStr;//System.Data.SqlClient命名空间下
2)准备命令语句其实就是在数据库字段执行的sql命令
string sql="insert into class values(‘’,'')";
3)创建1个命令对象 用来执行命令
SqlCommand cmd=new SqlCommand ();
cmd.CommandText=sal;//指定对象的执行的sql命令
cmd.Connection=conn;//指定对象的连接通道
//执行非查询的语句 增删改
conn.Open();
int res=cmd.ExecueNonQuery();
(不管是什么语句此处也可以使用cmd.ExecuteScalar()也是可以在数据库执行的,ExecuteNonQuery()方法可以返回执行完命令后受影响的行数,ExecuteScalar()返回的是结果集的首行首页,如果是空的结果集返回的是null)
//判断返回的行数用来判断执行是否成功
if(res>0)
{
mbox("执行成功");
}
else
{
mbox("执行失败");
}
conn.Close();
Connection:
Connection应用程序与数据库之间的连接通道
SqlConnection连接通道会默认情况下使用连接池,连接池的作用就是当需要创建1个连接通道的时候会去这个连接池里面根据连接字符串找是不是有相同的连接对象,如果有则直接返回不会再去重新创建对象 如果没有则创建对象返回 当使用完这个对象后 会放回连接池
conn.State State 用来表示连接通道的状态
State.Close 相当于设置1个路障
conn.Dispose() 不是真正的释放资源,内部调用了close(),并清空了ConnectionString,其实是将对象放到连接池中,等到再次调用时就不用另外新建一个对象
连接其他服务器:1.关闭防火墙 2.TCP,IP协议要开启 3.代理服务要开启
连接字符串的语法如果错误,则在创建连接通道的时候就会报错,若语法没错而属性值错误,则在open时报异常
conn.StateChange事件,在连接通道的状态发生改变的时候被触发
清空连接池: SqlConnection.ClearAllPools();清空连接池里的所有的连接对象
SqlConnection.ClearPool(conn);清空指定的连接对象
一般情况下读建议使用连接池
Command:
1)步骤
1.创建连接通道
2.准备SQL语句 若有多行命令用;隔开
3.创建命令对象
两种创建方式:SqlCommand cmd=new SqlCommand(sql,conn);
SqlCommand cmd=conn.CreatCommand();
4.指定这个命令对象要执行的sql命令和连接通道
5.打开连接
6.执行非查询的语句命令 增删改 返回的是执行完这个命令后受影响的行数
(凡是遇到关键字"FROM"附近有语法错误的都是SQL语句写错了)
7.判断结果
8.关闭通道
2)事件
StatementCompleted事件是每执行完1条语句就触发一次 e.RecordCount 用来返回完成的语句受影响的行数
3)ExecuteScalar()
用来返回结果集的第1行的第1列,如果结果集是空的,那么返回的就是null
object obj=cmd.ExecuteScalar();
ExectueReader方法:
由cmd调用 返回1个SqlDataReader对象 摩托车
SqlDataReader reader=cmd.ExecuteReader();//cmd.ExecuteReader()执行了查询语句,只不过这个查询语句返回的结果集是存在数据库服务端的
while(reader.Read()) //reader.Read()返回布尔类型
{
Console.WriteLine(reader[这里可以传入int类型或者列名别名])//reader[]索引器里面的int string都是针对结果集,如果结果集没有则报错,每调用一次方法指针向后移一位,然后尝试读取数据,如果有数据就返回TRUE,并将当前行的数据封装在reader对象中,通过索引器的方式访问,如果没有读取到数据则返回false
int i=reader.GetOrdinal("id")可以取得id列的下标针对结果集的比较少用
DateTime dt= Convert.ToDateTime(reader["AddTime"]);将结果集的结果转换为指定类型
reader.GetInt32() 更快捷的将指定列转换为指定类型各种Get方法
}
SqlDataReader 是一个在线读取的功能,读完前不能关闭通道,是1个只进的读取器,逐行只进读取,如果遇到null(数据库中的null为不知道)那么打印空字符串
BindingSource bs=new BindingSource (); 声明BindingSource 对象
bs.DataSource=reader; 设置bs对象的数据源属性
dgvData.DataSource=bs;再将BS对象赋给dgvData的DataSource属性
reader.Close();//读取器也是要关闭的,而且是在连接通道关闭之前关闭
conn.close();
多个reader的方法
reader.NextResult();//读取下个结果集
while(reader.Read())
{
cw("reader["列名"]");
}

原文地址:https://www.cnblogs.com/dinggf/p/4070703.html