ADO.NET概要

ADO.NET概要

基本介绍

ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库
ADO.NET概要_第1张图片

ADO.NET的组成

ADO.NET概要_第2张图片

ADO.NET使用的命名空间

1.System.Data
DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint,DataColumnMapping,DataTableMapping
2.System.Data.Coummon 各种数据访问类的基类和接口
3.System.Data.SqlClient 对Sql Server进行操作的数据访问类

ADO.NET核心对象介绍

1.SqlConnection:数据库连接器
2.SqlCommand:数据库命名对象
3.SqlDataReader:数据读取器
4.SqlDataAdapter:数据适配器,填充DataSet
5.DataSet/DataTable:数据容器
6. SqlCommandBuilder:生存SQL命令
7.*SqlParameter:为存储过程定义参数
8.*SqlTransaction:数据库事物

C#连接数据库

Connection连接对象

Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接。所有Connection对象的基类都是DbConnection类。

创建连接字符串

基本语法:数据源(Data Source)+数据库名称(Initial Catalog)+用户名(User ID)+密码(Password)
数据源(Data Source/Server):你的数据的物理文件所在地,服务器地址(可以是IP/可以是计算机名称)
数据库名称(Database/Initial Catalog):数据源里面的哪个数据库
1.SQL Server链接字符串
标准安全连接:

 Data Source=.;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;

或者

  Server=myServerAddress;Database=myDataBase;User Id=myid;Password=mypwd;Trusted_Connection=False;

可信连接:

   Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;

或者

   Server=myServerAddress;Database=myDatabase;Trusted_Connection=True; 

2.Access连接字符串

   Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\myDatabase.mdb;User Id=admin;Password=;

3.MySQL连接字符串

   Server=myServerAddress;Database=myDatabase;Uid=myUsername;Pwd=myPassword;

4.DB2连接字符串

   Server=myAddress:myPortNumber;Database=myDatabase;UID=myUsername;PWD=myPassword;

5.Oracle连接字符串

   Data Source=TORCL;User Id=myUsername;Password=myPassword; 

连接到数据库

Connection对象有两个重要属性:
(1)ConnectionString:表示用于打开 SQL Server数据库的字符串;
(2)State:表示Connection的状态,有Closed和Open两种状态。
Connection对象有两个重要方法:
(1)Open()方法:指示打开数据库;
(2)Close()方法:指示关闭数据库。

 SqlConnection sqlCon;
        private void button1_Click(object sender, EventArgs e)
        {
            //string strCon = "Server=127.0.0.1;Database=DB_InLett;Trusted_Connection=true;";
            string strCon = "Data Source=192.168.1.99; Initial Catalog=DB_InLett;User id=sa;pwd=123;";
            if (sqlCon==null)
            {
                sqlCon = new SqlConnection(strCon);
            }
            //sqlCon.ConnectionString = strCon;
            if (sqlCon.State== ConnectionState.Closed)
            {
                sqlCon.Open();
                button1.Text = "断开数据库";
            }
            else if (sqlCon.State== ConnectionState.Open)
            {
                sqlCon.Close();
                button1.Text = "连接数据库";
            }
        }

Command对象

Command对象也称为数据库命令对象,Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将Command对象的CommandType属性设置为CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。

Command主要属性

1.CommandText:指定要执行的SQL语句或者存储过程名称
2.Connection:将CommandText语句放到哪个连接中去执行,指定执行SQL语句的具体数据库
3.CommandType:默认是设定给CommandText属性指定SQL语句,如果使用存储过程则需要设置成StoredProcedure

Command主要方法

ExecuteNonQuery

**ExecuteNonQuery():**执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。用于完成insert,delete,update操作。

  private void button2_Click(object sender, EventArgs e)
        {
            string sql = "INSERT INTO Teacher VALUES('07', '熊二')";
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = sql;
            cmd.Connection = sqlCon;
            cmd.ExecuteNonQuery();
        }

必须注意在执行SQL命令时必须要将SQL连接开启
ADO.NET概要_第3张图片

ExecuteScalar

ExecuteScalar()从数据库检索单个值。这个方法主要用于统计操作。ExecuteScalar()这个方法是针对SQL语句执行的结果是一行一列的结果集,这个方法只返回查询结果集的第一行第一列
executeScalar主要用于查询单行单列的值,如聚合函数(count,max,min,agv,sum)。

 private void button3_Click(object sender, EventArgs e)
        {
            string sql = "SELECT COUNT(*) FROM Teacher";
            SqlCommand cmd = new SqlCommand(sql,sqlCon);
            label1.Text = cmd.ExecuteScalar().ToString();
        }

ExecuteReader

ExecuteReader用于实现只进行读取的高效数据查询。
ExecuteReader:返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾。
使用DataReader可以提高执行效率,有两种方式可以提高代码的性能:
一种是基于序号的查找
一个是使用适当的Get方法来查找。
因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号。

 private void button4_Click(object sender, EventArgs e)
        {
            string sql = "SELECT * FROM Teacher";
            SqlCommand cmd = new SqlCommand(sql,sqlCon);
            SqlDataReader sdr=cmd.ExecuteReader();
            while (sdr.Read())
            {
                listBox1.Items.Add(sdr.GetString(1));
            } 
        }

DataGridView控件

基本的数据渲染

根据提供的数据展示出效果。
提供给DataGridView数据源有很多方式,大致有如下三种:

  1. 直接增加,每个单元格类型都是DataGridViewTextBoxCell
  2. 直接增加,但我们可以指定单元格类型
  3. 指定Source属性为一个DataTable

列宽自适应

 foreach (DataGridViewColumn item in dataGridView1.Columns)
            {
                item.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            }

ADO.NET概要_第4张图片
如果想让列宽能按比例填充显示区域则 column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

禁止缩放单元格大小

AllowUserToResizeColumns:true:禁止缩放列
AllowUserToResizeRows:true:禁止缩放行

用户自定义列的顺序

用户可以拖动的方式排序列展示AllowUserToOrderColumns:true

是否可以编辑单元格

1.窗体的ReadOnly为false
2.在Columns弹出的列编辑窗口里,选择列的ReadOnly为false
3.SelectionMode为RowReadSelect(这是默认值)

行头,列头不显示

在属性面板里选中RowheadersVisible和ColumnHeadersVisible,置为false

列表显示不完全,必需鼠标移到组件上才能显示的bug

将RowheadersVisible置为false即可

行头显示行号

为RowStateChanged事件添加监听,(在属性面板右边闪电图标下找)。

 for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                DataGridViewRow dgr = dataGridView1.Rows[i];
                dgr.HeaderCell.Value = i+1;
            }
            dataGridView1.Refresh();

行号没有完全显示出来的解决办法是将DataGridView的RowHeadersWidthSizeMode属性设置为AutoSizeToAllHeaders、AutoSizeToDisplayedHeaders或者AutoSizeToFirstHeader。

禁止自动创建列

如果我们提供的vo对象,dataGrid会自动根据属性创建列,这不是我想要的,我希望能控制显示。如下设置即可
dataGridView.AutoGenerateColumns = false;

修改单元格类型

单元格可以显示文件,也可以显示单元框,下拉框,图片和超链拉。只要在编辑列窗口里选择ColumnType下拉框,选择一下即可。当然选择的不同,数据设置不同,比如
单选框DataGridViewCheckBoxColumn如下

ADO.NET概要_第5张图片
下拉框DataGridViewComboBoxColumn
ADO.NET概要_第6张图片

选中模式

可以指定选中是整个行被选中还是每个小单元格被选中
SelectionMode,全部可选如下
ADO.NET概要_第7张图片

取消用户自动添加行

 dataGridView1.AllowUserToAddRows = false;

关闭点击列头自动排序

  for (int i = 0; i < this.dataGridView1.Columns.Count; i++)
        {
            this.dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
        }

DataTable和DataSet

DataSet是数据集,DataTable是数据表,DataSet存储多个DataTable。DataSet和DataTable像是专门存储数据的一个容器,在你查询数据库得到一些结果时可以存在里面。

DataSet功能强大有浏览、排序、搜索、过滤、处理分级数据、缓存更改等功能,还可以与XML数据互换。DataSet中可包括多个DataTable,可将多个查询结构存到一个DataSet中,方便操作 ADO.NET开发人员为方便数据处理开发出来的,是数据的集合,为解决DataReader的缺陷设计的,DataReader数据处理速度快,但它是只读的,一旦移到下一行就不能查看上一行的数据,DataSet则可以自由移动指针。DataSet的数据是与数据库断开的。DataSet还可用于多层应用程序中,如果应用程序运行在中间层的业务对象中来访问数据库,则业务对象需将脱机数据结构传递给客户应用程序。

你可能感兴趣的:(ADO.NET概要)