ADO.NET的几个对象

  • Connection:管理数据库的连接
  • Command:对数据库执行命令
  • DataReader:数据流读取器,返回的数据都是快速的且只是“向前”的数据流。无法实例化,只能通过Command创建
  • DateSet:缓存数据,对数据进行操作
  • DataAdapter:数据适配器,数据库和DataSet的桥梁

ADO.NET命名空间

注:图取自网络

常见的是SQL数据源

引用命名空间:

using System.Data.SqlClient;

一、Connection类

连接数据库,Connection会被Command对象使用,这样就能够知道是在哪个数据源上面执行命令。

Connection有两个重要属性:ConnectionString和State,连接字符串和连接状态

       两个重要方法:Open()和Close(),用来打开和关闭数据库连接

using (SqlConnection conn = newSqlConnection("DataSource(local);Integrated Security=SSPI;Initial Catalog=Northwind"))
{
conn.Open();
}

conn.State.ToString():当前连接状态,返回值为Closed 或Open

二、Command对象

Command有两个重要属性:CommandType, 指明CommandText 是SQL语句,存储过程还是表操作,默认值为CommandType.Text; 

                                                    两个值:(1)CommandType.StoredProcedure,以存储过程方式执行

                           (2)CommandType.Text SQL语句执行

                           (3)CommandType.TableDirect,直接处理某个表

               CommandText,值为SQL语句或是存储过程名称,默认为SQL语句

创建命令对象的两种方式

using (SqlConnection conn = newSqlConnection("DataSource(local);Integrated Security=SSPI;Initial Catalog=Northwind"))
{
conn.Open();
SqlCommand SqlCommand= conn .CreateCommand(); //这种方式比较好
SqlCommand.CommandText="select * from Student";
//或是实例化一个对象
//SqlCommand sqlcmd=new SqlCommand();
//sqlcmd.CommandText ="select * from student";
//sqlcmd.Connection=conn;
}

三个重要方法:

  • ExecuteReader():返回DataReader对象,DataReader对象说明详见下文
using (SqlConnection conn = newSqlConnection("DataSource(local);Integrated Security=SSPI;Initial Catalog=Northwind"))
{
SqlCommand command = conn.CreateCommand();
  command.CommandText = "Select * form Student";
   //CommandBehavior.CloseConnetion 关闭dataReader时,同时也把与它相关联的Connection连接也一起关闭
  using (SqlDataReader dr = command.ExecuteReader(CommandBehavior.CloseConnection))
  {
    while (dr.Read())
    {
      //开始读取数据了,接下来你想怎么样就怎么样了
      string str = dr.GetSqlString().ToString();
    }
  }
}
using (SqlConnection conn = newSqlConnection("DataSource(local);Integrated Security=SSPI;Initial Catalog=Northwind"))
{
SqlConnection conn = new SqlConnection(str); //创建连接
SqlCommand cmd = conn.CreateCommand(); //创建命令
cmd.CommandText = "SELECT * FROM Person"; //设置操作语句
conn.Open(); //打开连接
//SqlDataReader读取数据
using (SqlDataReader reader = cmd.ExecuteReader())
{
  while (reader.Read())
{
Console.WriteLine(reader[0] + ":" + reader[1]); //输出当前行的第一列,第二列数据
}
} cmd.CommandText = "SELECT Count(*) FROM Person";
object obj = cmd.ExecuteScalar(); //仅查询第一行第一列
Console.WriteLine((int)obj);
conn.Close(); //关闭连接 }
  • ExecuteScalar():返回数据第一行第一列的值,如Count(*),如果没有数据,则返回NULL
  • ExecuteNonQuery():返回增、删、改的影响行数
using (SqlConnection conn = newSqlConnection("DataSource(local);Integrated Security=SSPI;Initial Catalog=Northwind"))
{
SqlCommand cmd = conn.CreateCommand(); //创建命令
cmd.CommandText = "Update Person Set PersonName = 'Ado.net修改' WHERE PersonId = @Id"; //设置操作语句
cmd.Parameters.Add("@Id", SqlDbType.Int); //添加参数,说明类型
cmd.Parameters["@Id"].Value = ; //设置参数值
conn.Open(); //打开连接
int i = cmd.ExecuteNonQuery(); //执行命令,ExecuteNonQuery由名称看出,只能用于非查询语句
conn.Close(); //关闭连接
Console.WriteLine(i); //输出影响行数   //直接使用参数集合添加你需要的参数,推荐这种写法
  //SqlParameter[] parameters = new SqlParameter[]
  //{
    //new SqlParameter("@name",SqlDbType.NVarChar,100){Value = "yang"},
    //new SqlParameter("@age",SqlDbType.Int,2){Value = 888},
    //new SqlParameter("@address",SqlDbType.NVarChar,20){Value = "Jiang Su"}, 
  //};
  //ommand.Parameters.AddRange(parameters);
}

三、DataReader类

常见方法:

(1)Read()返回Bool,是否还有下一行,并移到结果集的下一行

(2)GetOrdinal(string 列名),返回序列号,通过列名来获取当前列的索引号,这样如果下次你列名顺序发生变化也没有关系

(3)GetName(int 序列号):  获取列名,参数为指定列名的序列号,返回string

int nameId= dr.GetOrdinal("name");
string columnName = dr.GetName(nameId);
//知道列名获取值
using (SqlDataReader reader = cmd.ExecuteReader())
{
  while (reader.Read())
{
   Console.WriteLine(reader.GetString(sdr.GetOrdinal("
name")));
   } 
}

(4)NextResult(),当查询为批处理查询时,使用这个方法去读取下一个结果集,返回值为Bool,如果存在多个结果集,则为 true;否则为 false

using (SqlConnection conn = new SqlConnection(strConnString))
{
   conn.Open();
   using (SqlCommand cmd = new SqlCommand())
   {
     cmd.Connection = conn;
     // 利用分号「;」串连多句 SQL 语句,之后再一次丢进数据库去执行,达成「批次」读取或更新
     // 数据库的目的。此技巧亦适用于 INSERT、UPDATE、DELETE 的「批次」执行。
     cmd.CommandText = "SELECT 字段1,字段2 FROM 数据表1 ; SELECT * FROM 数据表2";
     using (SqlDataReader dr = cmd.ExecuteReader())
     {
       while(dr.Read())
       {
         this.DropDownList1.Items.Add(dr.GetSqlString().ToString() + dr.GetSqlInt32().ToString());
       }
    dr.NextResult();
     while(dr.Read())
    {
         this.DropDownList2.Items.Add(dr.GetString() + dr.GetInt32());
      }
    }
  }
}

四、SqlDataAdapter 数据适配器

有四个重载

无参
SqlDataAdapter(SqlCommand)        // 执行命令对象实例
SqlDataAdapter(String, SqlConnection) //只能指定查询语句 ②连接对象实例
SqlDataAdapter(String, ConnectionString)// 用 SelectCommand 和一个连接字符串初始化 SqlDataAdapter 类的一个新实例

一个重要方法:Fill(),数据填充至DataSet

using (SqlConnection conn = newSqlConnection("DataSource(local);Integrated Security=SSPI;Initial Catalog=Northwind"))
{
  DataSet dataSet = new DataSet();
conn.Open();
SqlCommand command = conn.CreateCommand();
command.CommandText = "select name,age,address from MyInformation";
SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
dataAdapter.Fill(dataSet); //填充数据
}

对数据进行增加操作

using (SqlConnection conn = newSqlConnection("DataSource(local);Integrated Security=SSPI;Initial Catalog=Northwind"))
{
using (SqlConnection conn = new SqlConnection(ConnectionString()))
{
conn.Open();
//构建查询语句,也可以指定SqlCommand,其中变换的方法有很多
SqlDataAdapter da = new SqlDataAdapter("select LastName,FirstName from dbo.Employees", conn);
DataSet ds = new DataSet();
da.Fill(ds);
//这句话很重要,它会把你在DataSet增加的数据转化为SQL语句用来更新数据库
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da);
//添加行,实例化一个行对象,注意是用NewRow来创建行
DataRow row = ds.Tables[].NewRow();
row[] = "Yang";
row[] = "鬼头";
ds.Tables[].Rows.Add(row); //添加到表中
da.Update(ds); //把DataSet中表和数据库进行对比,更新
}
}

更新操作

using (SqlConnection conn = newSqlConnection("DataSource(local);Integrated Security=SSPI;Initial Catalog=Northwind"))
{
using (SqlConnection conn = new SqlConnection(""))
{
SqlDataAdapter da = new SqlDataAdapter("SQL语句或你自己定义的命令对象", conn);
DataSet ds = new DataSet();
da.Fill(ds);
//很重要的一句话
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da);
ds.Tables[].Rows[][] = ""; //修改数据
da.Update(ds);
//调用Update方法其中隐式的调用了AcceptChanges方法,更新数据集中的数据
//如果你继续使用这个数据集而没有调用这个方法,在后面的使用会出现异常
ds.AcceptChanges(); //这句话可以不写的
}
}

最后

对于一些增删改,都应加上事务,防止出错能回滚数据

using (SqlConnection conn = newSqlConnection("DataSource(local);Integrated Security=SSPI;Initial Catalog=Northwind"))
{ //事务
SqlTransaction myTran = con.BeginTransaction();
tyr
{
//正常代码执行
..............
//提交事务
myTran.Commit();
}
catch(Exception e)
{
//出错,事务回滚
myTran.Rollback();
}
}

ADO.NET的整理的更多相关文章

  1. ADO.NET--收藏整理别人的教程

    本文所有内容均从前辈的博客中收集整理而来,仅供自己学习参考的时候快速访问用. ADO.NET入门教程(一) 初识ADO.NET ADO.NET入门教程(二)了解.NET数据提供程序 ADO.NET入门 ...

  2. ado.net知识整理

    对ado.net总是半知半解,五大对象也总是混淆,近期自己做小项目练手,整理了一些知识点 ado.net的无要素(摘自其他博文) Connection 物件    Connection 对象主要是开启 ...

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

    目前为止,学习编程一年有余,写过管理系统,写过商城,写过桌面,接触的多了,乱七八糟的点太多,一堆前段框架,后台类库,纷纷杂杂,更新迭代之快也是令人咋舌.于是我就在想,作为一名程序员,哪些内容是实打实的 ...

  4. ADO.Net笔记整理(一)

    几次装机,Notes已烟消云散,近日因为Node.js死活搞不定,无奈装机,备份好的东东,没想到磁盘扇区出现异常,可能是PE启动盘的病毒,只好将磁盘全部重新分区,恢复数据也懒得恢复了,日积月累关乎将来 ...

  5. 关于ADO.NET的一些知识整理

    ADO.NET是什么 虽然我们都知道ADO.NET是对数据库的操作,但是要真的说出ADO.NET的具体含义还不是很容易. ADO.NET是ActiveX Data Objects的缩写,它是一个COM ...

  6. 【资料整理】ADO.NET

    ADO.NET: 1.SYSTEM.DATA 命名空间下类的集合的统称,用于操作 连接数据库的 它提供了统一的编程接口,可以操作不同的数据库 数据库实例:默认实例(MSSQLSEVER)和命名实例(M ...

  7. ADO.NET整理 [转]

    虽然我们都知道ADO.NET是对数据库的操作,但是要真的说出ADO.NET的具体含义还不是很容易. ADO.NET是ActiveX Data Objects的缩写,它是一个COM组件库,用于在micr ...

  8. ADO.NET数据访问模板整理

    /// <summary> /// 数据访问类:hi_test /// </summary> public partial class TestDA { public Test ...

  9. 从头开始学习数据库及ADO.NET之PostgreSql字段约束——竹子整理

    约束数据表列执行的规则.这些是用来防止无效的数据被输入到数据库中..这确保数据库中的数据的准确性和可靠性. 约束可以是列级或表级.仅适用于表级约束被应用到整个表的列级约束.为列定义的数据类型,本身是一 ...

随机推荐

  1. C++ 使用命名规范

    刚开始正式学习C++, 之前写了一个C++ 的小程序,但是并没有注意命名规范之类的.这一次重写一个类似的程序,再加上这几天学习 c++Prime(发现好喜欢这本书.虽然看的很慢,每一小节都感是满满的干 ...

  2. Win7 VS2017编译PBR渲染引擎google filament

    按照官方说明 https://github.com/google/filament 前置工具包 Windows 10 SDKVisual Studio 2017Clang 6Python 3.7Git ...

  3. JavaScript基础视频教程总结(061-070章)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. Excel把数据存入共享字符串文件中并返回该字符串的下标

    public static int InsertSharedStringItem(string text, pkg.SharedStringTablePart shareStringPart) { i ...

  5. IDEA的Database管理台如何显示

    1.找出database的显示view 2.点击设置数据库,下载驱动文件,直接点击下载就行了,用什么数据库就下什么 3.填写服务器地址和用户名密码,点击测试,成功就表示连上了 4.一些常用按钮 5.目 ...

  6. Python在Windows上安装配置测试

    Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的. 2.x还是3.x 目前,Python ...

  7. Python之旅Day4 闭包函数 模块及模块倒入

    闭包函数 闭包函数就是在内部函数当中有对外部函数名字的引用 ###代码示例1### def f1(): x =1 def f2(): print(x) return f2 f=f1() f() ### ...

  8. 快速找出网站中可能存在的XSS漏洞实践(一)

    一.背景 笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖掘过程记录 ...

  9. Javascript高级编程学习笔记(28)—— BOM(2)window对象2

    今天讲一下window对象和浏览器导航,弹窗等有关的内容 导航和打开窗口 window.open() 用于导航到某个特定 url 该方法接收四个参数 1.url 2.窗口目标(当页面中有多个框架fra ...

  10. python创建数组的方法

    一 直接定义法: 1.直接定义 matrix=[0,1,2,3] 2.间接定义 matrix=[0 for i in range(4)] print(matrix) 二 Numpy方法: Numpy内 ...