ADO学习

微软专门封装了一套与各种数据库交互的类库,就是ADO.NET
  ADO.NET不光能和SQLSERVER交互,还可以与多种主流数据库交互,如Oracle,MySql,Assess等
常用类:
  SqlConnection
用来连接数据库
  SqlCommand 用来执行SQl语句,增删改查等
  SqlDataReader
数据读取器,负责对数据库执行命令,用来读取数据库,每次读一行,只能往前读
  SqlDateAdapter
数据适配器,负责数据集与数据库的联系,一次读取整个结果集,需要将读取的数据库放入数据集中
  DateSet
数据集,负责对数据执行命令,相当于一个临时仓库

  SqlConnectionStringBuilder
自动生成连接字符串
  SqlParamter 带参数的SQL语句
  SqlTransaction
ADO.NET中的事务
与DateSet相关的类:
  DataVIew DataRowView
  DataTable DataRow
DataColumn
  DataRealation //DataTable之间的关系 Constrain
//约束
ADO.NET中的连接资源都实现了IDispose()接口,可以用using来管理资源
连接池:
  第一次创建连接通道时,会实例化一个连接对象,使用后会放入连接池中,之后,若再创建使用相同连接字符串的连接对象时,则会直接从连接池中取出,不会再实例化一个新的连接对象
  pooling
= true; //启用连接池
  SqlConnection.ClearAllPools();
//清除所有连接池
  SqlConnection.ClearPool();
SqlConnection类:连接数据库
  1.创建连接对象
  SqlConnection
conn = new SqlConnection();
  conn.ConnectionString = @"Data
Source=.\sqlexpress;Initial Catalog=heima;uid = sa;pwd = 123456";
//指定连接字符串(连到哪儿去)
   2.打开数据库连接
  conn.Open(); //打开连接
  conn.State; //
获取数据库连接状态
  3.关闭数据数据库连接
  conn.Close(); //关闭连接
  conn.Dispose();
//释放资源,包含Close()方法
  在WinForm中添加配置文件:
    1.添加配置文件
App.config2
    2.在配置文件中添加连接字符串:
    <connectionStrings>
      <add
name="strConn" connectiongString="server=.\sqlexpress;database =HeiMaBlog‘;
uid=sa; pwd=123456">
    </connectionStrings>
    3.在项目中 添加引用
->.Net选项卡 ->
System.Configuration
  若使用附加数据库需在Main()函数中加入以下代码:
  string dataDir =
AppDomain.CurrentDomain.BaseDirectory;
//获取当前应用程序域的基目录
    if(dataDir.EndsWith(@"\bin\Debug\") ||
dataDir.EndsWith(@"\bin\Release\"))
    {
      dataDir =
System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
      AppDomain.CurrentDomain.SetData("DataDirectory",
dataDir);
    }

//连接字符串一 //pooling=ture; 添加到连接池
string strConn =
@"server=.\sqlexpress;database = Person;uid = sa;pwd =
123456;pooling=ture";//密码验证
string strConn = @"server=.\sqlexpress;database
= Person;integrated security=ture"; //Windows身份验证

//连接字符串二
string strConn = @"Data Source=.\sqlexpress;Initial
Catalog=ItcastSIM;Integrated Security=True";
SqlConnectionStringBuilder
cb = new SqlConnectionStringBuilder(); //连接字符串创建类
cb.DataSource =
".\\sqlexpress";
cb.InitialCatalog = "Person";

cb.IntegratedSecurity = true;
cb.Pooling = true;
string strConn =
cb.ToString();

//附加数据库连接字符串
string strConn = @"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\db1.mdf; Integrated Security=True; User
Instance=True";

//从配置文件获取连接字符串
string strConn =
ConfigurationManager.ConnectionStrings["strConn"].ConnectionString;

//创建连接对象 conn
SqlConnection conn = new SqlConnection(strConn);

conn.Open(); //打开连接
Console.WriteLine("连接成功");
conn.Dispose();

SqlCommand类:创建并执行SQL语句
  SqlCommand cmd = new SqlCommand();
//创建命令对象
  cmd.Connection = conn; //指定连接通道
  cmd.CommandText = "select
count(*) from Test"; //指定SQL命令
  object o = cmd.ExecuteScalar();
//执行SQL命令
 SqlCommand常用的三个方法:
  cmd.ExecuteNonQuery();
//执行非查询命令,即插入,更新,删除等,并返回受影响的行数
  cmd.ExecuteReader();
//返回SqlDateReader对象
  cmd.ExecuteScalar();
//执行查询,并返回结果集的第一行第一列,其内部也是调用了ExecuteReader()方法

//创建SQL命令类,用using释放资源
using (SqlCommand cmd = conn.CreateCommand())

{
//所要执行的SQL语句
cmd.CommandText = "Insert into
T_Users(UserName,Password) values(‘admin‘,‘888888‘)";

cmd.ExecuteNonQuery(); //可返回受影响的行数

//在values关键词前加上output inserted.ID,可以得到插入的自动增长ID的值
cmd.CommandText =
"Insert into T_Users(UserName,Password) output inserted.ID
values(‘admin‘,‘888888‘)";
int i =
Convert.ToInt32(cmd.ExecuteScalar());
}

SqlDataReader类:数据读取器
  SqlDataReader reader = cmd.ExecuteReader();
//创建SqlDateReader对象(必须通过ExecuteReader()来赋值,因为SqlDataReader的构造函数是私有的)
  while(reader.Read())
//Read()方法向前逐行读取数据,读完返回false
  {
    string id =
reader[0].ToString();//获得当前读取行的第一列
    string id =
reader["id"].ToString();//通过列名读取
    string id = reader.GetString(0);
//只能通过序号访问
    string id = reader.GetString(reader.GetOrdinal("ID"));

  }
  dr.close(); //关闭读取器
  reader.HasRows;
//返回一个BOOL值,用于判断结果集中是否有数据
  int i = reader.GetOrdianl("列名");
//通过列名获取其下标
  GetInt32(序号) GetString(序号)
返回指定序号(下标)的值
  reader.IsDbNull(下标);
//用来判断reader[1]是否为null,反回bool值
  SqlDataReader必须独享一个数据库连接,因为SqlDataReader结果集是缓存在数据库端的,并没有在本地服务器中,所以需要保持连接,一次一次的去读

using(qlCommand cmd = conn.CreateCommand())
{

cmd.CommandText = "Select * from T_Users";

//创建SQL读取器
using(SqlDataReader reader = cmd.ExecuteReader())
{

while(reader.Read())
{

Console.WriteLine(reader.GetString(reader.GetOrdinal(UserName));

}
}
}

cmd.StatementCompleted 事件
每条语句执行完后触发
多条SQL语句同时执行,中间需要用分号隔开
参数化查询:
  @UserName 表示此处用参数代替,
不会在C#中进行替换,而是在SQLServer中直接用参数的值进行数据比较,因此不会有注入漏洞攻击
  cmd.CommandText = "select
* from T_Users where UserName = @UserName";
  cmd.Parameters.Add(new
SqlParameter("UserName","admin"));
  cmd.Parameters.Add(new
SqlParameter("ID","(object)1")); 此处需要使用数据类型转换,避免被当成枚举值使用
DataDet
数据集
  DataSet是数据的集合,临时数据库,内存数据库.


//创建数据集对象
DataDet ds = new DataSet();
//创建数据表
DataTable dt = new DataTable();
//装数据表添加到数据集的表集合中
ds.Tables.Add(dt)
//创建数据列
DataColumn col = new DataColmun("id",typeof(int));
col.AllowDBNull = false; //不允许为空
col.AutoIncrement = true; //设置为自增长列
col.AutoIncrementSeed = 1; //设置种子初始值
col.AutoINcrementStep = 1; //设置种子增长值
DataColumn col1 = new DataColumn("name",typeof(string));
//为数据集中的表添加列
dt.Columns.Add(col);
dt.Columns.Add(col1);
//创建数据行
DataRow row = dt.NewRow();
row[1] = "Tom";
//为数据集添加行
dt.Rows.Add(dr1);
//遍历数据集中内容
StringBuilder sb = new StringBuidler();
foreach(DataTable table in ds.Tables)
{
sb.AppendLine("表名" + table.TableName);
foreach(DataRow dr in table.Rows)
{
for(int i = 0; i<dr.Table.Columns.Count; i++)
{
sb.Append("第"+(i+1)+"列:"+dr[i]);
}
sb.AppendLine();
}
}

  SqlDataAdapter用于填充数据集
  SqlDataAdapter内部其实还是使用了SqlDataReader去读取数据的,只不过封装起来了,通过DataAdapter也可以实现分页,只是并不高效,因为Adapter是到数据库执行SQL语句,然后存入到数据库缓存中,再从中截取数据,而真正的分页是在数据库查询的时只查询对应页的行,而不是查询所有的行
  DataSet
ds = new DataSet(); //创建数据集
  SqlDataAdapter da = new SqlDataAdapter(cmd);
//创建数据适配器
  da.Fill(ds); //填充数据集
  da.Fill(ds,0,10,"tempTable");
//从第零条读取10条记录

DataSet dataSet = new DataSet(); //创建数据集


string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectiongString; //获取数据库连接字符串
using(SqlConnection conn = new Sqlconnection(connStr)) // 连接数据库
{
conn.Opne();
using(SqlCommand cmd = conn.CreateCommand()) //创建命令对象
{
cmd.CommandText = "Select * From TableName" //写入命令
DataSet dataset = new DateSet(); // 声明数据集
SqlDataAdapter adapter = new SqlDataAdapter(cmd); //创建数据集适配器
adapter.Full(dataSet); //装数据填充到数据集中
}
}
DataTable table = dataSet.Tables[0]; //获取数据集中的表
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i]; //获取数据集中的行
string name = Convert.ToString(row["UserName"]); //获取行中的字段
string age = Convert.ToString(row["Age"]);
}

  更新数据集: Update() 使用SqlConnectionBuilder SQL命令生成助手自动生成Command

    SqlConnectionBuilder要求表必须有主键,通过DataRow的RowState可以获得行的状态,调用DateSet的GetChange()方法得到变化的结果集,降低传递的资源占用
    SqlCommandBuilder
scb = new SqlCommandBuilder(da); //创建SQL命令
    da.Update(ds,"tempTable");
//执行SQL命令

时间: 2024-08-07 08:39:10

ADO学习的相关文章

黑马自学ADO学习

ADO.net  就是微软提供的一堆类库,这个类库里面有很多专门操作各种数据库的类,他们都是实现了统一口 组成部分 第一部分: 数据提供程序  命名空间:System.Data.SqlClient Connection   连接数据库的通道 Command    命令执行对象 DataReader   数据读取器 DataAdapter  数据适配器 第二部分: 数据集 命名空间:System.Data 本地化的结果集,就是把数据库查询之后的结果集,取出来存到本地内存中 ConnectionSt

20140911 关于多条件查询

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Data.SqlClient; namespace 多条件查询{

ADO.NET学习笔记之连接字符串

ADO.NET 2.0学习笔记之连接字符串 刚刚入门不久,想什么学习下dot net平台,就先从数据访问入手吧,从今天开始认真学习ado.net 2.0,为将来发展做好坚实基础. 连接字符串 SQL Client .net数据提供程序在连接到数据库时极其灵活,它提供了多种用以生成连接字符串的方式.可以使用关键字,例如“Data Sourse”.“Initial Catalog”,也可以使用"Server".“Database”等旧术语. 下面是两个例子,用于连接到SqlServer数据

ADO.NET详细学习笔记

[1]ADO.NET和ADO的区别: ADO以Recordset存储,而ADO.NET则以DataSet表示.Recordset看起来更像单表,如果让Recordset以多表的方式表示就必须在SQL中进行多表连接.反之,DataSet可以是多个表的集合.ADO 的运作是一种在线方式,这意味着不论是浏览或更新数据都必须是实时的.ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用XML制作数据的一份幅本,ADO.NET的数据库连接也只有在这段时间需要在线. 由于ADO使用COM技术,

学习之ADO.NET

1)真实项目vs玩具项目 2)用户没有登录时,即LoginWindows.ShowDialog()!=true,则ShutDown 3)软删除 在数据库表中创建一个IsDeleted字段(bit类型,true/false),用来标识该记录下的对象是否已离职等. 注:bit类型,在SQL用0-false.1-true表示,在.NET中用bool表示 4)锁定用户:创建一个IsLocked字段 5)MD5加密,盐应写入配置文件,以便用户自行更改 扩展:<数学之美>之信息指纹 6)性别国标:0:未知

ADO.NET 学习笔记 入门教程

本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=57&page=1&extra=#pid63 这是本人在学习ADP.NET过程中所作的笔记,可作为ADO.NET入门或者复习的教程. 连接字符串: DataSource=localhost; AttchDBFilename=|DataDirectory|\Database1.mdf; InitialCatalog=UserDate; Integrated Secu

从头开始学习数据库及ADO.NET——竹子整理

目前为止,学习编程一年有余,写过管理系统,写过商城,写过桌面,接触的多了,乱七八糟的点太多,一堆前段框架,后台类库,纷纷杂杂,更新迭代之快也是令人咋舌.于是我就在想,作为一名程序员,哪些内容是实打实的干货呢,互联网的内容是学习不完的,只有当你用到它时,才去学习,这是我的理解.零零散散的东西除去,越来越深的感触就是像我这种做应用的实际就是跟数据打交道,数据类型,数据量,数据的存储方式...回顾之前的学习路线,数据库这块感觉理解尚缺,于是今天开始重新回过头整理一遍数据库及ADO.以新人的姿态去学习知

ADO.NET Entity Framework学习笔记(3)ObjectContext

ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转] 说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject 添加实体 将实体添加到集合中, 创建实体时,状态为EntityState.Detached 当调用AddObject将实体添加到Context时,状态为EntityState.Added myContext context = new myContext(); myTab r = new myTab(

MFC学习(一)——ADO数据库编程

这几篇是是在MFC框架下做保险项目的学习心得,只学了两周,但是还是学了很多知识. 下面介绍一下用ADO来进行数据库的各种操作. 1.数据库连接和打开 这次项目用的是SQL Server数据库,ADO连接数据遇到最重要的问题就是找到连接字符串,经过亲身经历各种尝试,在网上发现了一种无bug的方法,就是通过新建ado.udl文件,然后打开填写相应的数据库后用记事本打开即可得到连接字符串.下面是我封装的一个打开数据库的方法: 1 BOOL CDateOperator::OpenDateBase() 2