ADO.NET是微软新一代.NET数据库的访问架构,ADO是ActiveX Data Objects的缩写。ADO.NET是数据库应用程序和数据源之间沟通的桥梁,主要提供了一个面向对象的数据访问架构,用来开发数据库应用程序。

ADO.NET主要包括Connection、Command、DataReader、DataSet和DataAdapter对象。详细介绍如下:

 
对象名称 说明
Connection 主要提供与数据库的连接功能
Command 用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令
DataReader 通过Command对象提供从数据库检索信息的功能。以一种只读的、向前的、快速的方式访问数据库
DataSet 支持ADO.NET断开式、分布式数据方案的核心对象。是一个数据库容器,可以看作是内存中的数据库
DataAdapter

提供连接DataSet对象和数据源的桥梁,DataAdapter对象使用Command对象在数据源中执行SQL命令,

以便将数据加载到DataSet中,并确保DataSet中数据的更改与数据源保持一致。

1.使用Connection连接数据库

在打开数据库建立连接之前,必须先设置好连接字符串(ConnectionString)

1.直接定义在字符串中

string Connstr = "Data Source=.;Initial Catalog=MyTest;User ID=sa;Password=12345";

2.存放在应用程序的配置文件(App.Config)中(实际开发的时候一般采用这种,......)

<connectionStrings>
     <add name="dbConnStr" connectionString="Data Source=.;Initial Catalog=MyTest;User ID=sa;Password=12345"/>
  </connectionStrings>

在后台代码里进行读取:

string Connstr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;

其中的参数说明如下:

DataSource为数据源,值为要连接的SQL Server实例的名称或网络地址(.表示本机的网络地址)

Initial Catalog为初始目录,值为数据库的名称

User ID为用户ID,值为SQL Server登陆账户

Password为密码,值为SQL Server账户登录的密码

Connect Timeout为连接超时设定,其值表示在终止尝试并产生错误之前,等待与服务器的连接的时间长度(以秒为单位)

Integrated Security此参数决定是否是安全连接。可能的取值有True,False,SSPI(SSPI是True的同义词)

前4个(DataSource,Initial Catalog,User ID,Password)是连接到SQL Server的连接字符串的必有项。

设置好连接字符串之后就可以使用SqlConnection对象来连接数据库了。调用SqlConnection对象的Open或Close方法可以打开或关闭数据库连接,必须注意必要时再打开数据库连接并尽早关闭。

e.g:

SqlConnection conn = new SqlConnection(Connstr);
                conn.Open();
                if (conn.State==ConnectionState.Open)
                {
                    MessageBox.Show("SQL Server数据库连接开启");
                    conn.Close();
                }
                if(conn.State==ConnectionState.Closed)
                {
                    MessageBox.Show("SQL Server数据库连接关闭");
                }

2.使用Command对象操作数据

  属性 说明
CommandType 获取或设置Command对象要执行命令的类型
CommandText 获取或设置要对数据库执行的SQL语句或存储过程名或表名
CommandTimeOut 获取或设置在终止对执行命令的尝试并生成错误之前的等待时间
Connection 获取或设置此Command对象使用的Connection对象的名称
Parameters 获取Command对象需要使用的参数集合

创建Command对象必须指定3个属性(Connection,CommandType,CommandText):

Connection属性:SqlCommand是对象执行命令操作的对象,它本身无法建立与数据库的连接,只能通过SqlConnection对象来建立连接。

CommandType和CommandText属性:CommandText既可以是SQL语句,也可以是存储过程,还可以是表的名字。要使用不同种类的CommandText,只需要设置相应的CommandType即可。

CommandType.Text:CommandType的默认值,表示执行的是SQL语句,为CommandText指定SQL字符串。

CommandType.StoredProcedure:指示执行的是存储过程,需要为CommandText指定一个储存过程的名称。

CommandType.TableDirect:指示用户将得到这个表中的所有数据,为CommandText指定一个数据表名称(不过还是建议直接写SQL来实现这个功能)。

e.g:

示例1:

using(SqlCommand cmd = new SqlCommand())//创建命令对象SqlCommand
                {
                    cmd.Connection = conn;//设置连接对象
                    cmd.CommandType = CommandType.Text;//设置Command对象执行语句的类型
                    cmd.CommandText = "Insert into Tbl_Students values ('aaa',20,'football');";//设置执行的语句
                    MessageBox.Show(cmd.ExecuteNonQuery().ToString());//ExecuteNonQuery返回执行SQL语句,受影响的行数
                }

示例2:

using(SqlCommand cmd = new SqlCommand("Insert into Tbl_Students values ('aaa',20,'football');",conn))
                {
                    MessageBox.Show(cmd.ExecuteNonQuery().ToString());
                }

示例3:

using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "Delete from Tbl_Students where Name='aaa';";
                    MessageBox.Show(cmd.ExecuteNonQuery().ToString());
                }

在执行Command操作时,有3种方法可用:

ExecuteNonQuery:用于非SELECT命令,比如INSERT,DELETE,UPDATE命令,返回命令所影响的数据的行数。也可以用ExecuteNonQuery来执行一些数据定义命令,比如新建、更新、删除数据库对象(如表、索引等)

ExecuteScalar:用于执行SELECT查询命令,返回数据中第一行第一列的值。通常用来执行那些用到COUNT或SUM函数的SELECT命令

ExecuteReader:执行SELECT命令,并返回一个DataReader对象。

这3个方法非常重要,如果要使用ADO.NET完成某种数据库操作,一定会用到这些方法,它们没有优劣之分,只是使用的场合不同。

使用Command对象来具体的添加、修改、删除数据就不举例说明了。

3.使用DataReader对象读取数据

在对数据库中的数据进行查询显示操作时,就可以使用DataReader对象来实现。当Command对象返回结果集时,需要使用DataReader对象来检索数据。DataReader对象返回一个来自Command的只读的、只能向前的数据流。

DataReader对象是一个简单的数据集,用于从数据源中读取只读的数据集,并常用于检索大量数据。DataReader每次只能在内存中保留一行,开销非常小。但在读取数据时,必须一直保持与数据库的连接(连线模式)。它是一个轻量级的数据对象,如果只需将数据读出并显示,那么它是最合适的工具,它的读取速度比DataSet(后面会讲到)对象要快,占用的资源也比DataSet少。

常用属性:

HasRows:判断DataReader对象中是否还有数据

FieldCount:获取当前行的列数

RecordsAffected:获取执行SQL语句所更改、添加或删除的行数

常用方法:

Read:使DataReader对象前进到下一条数据

Close:关闭DataReader对象

Get:用来读取数据集当前行的某一列的数据

e.g:

using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                MessageBox.Show(reader.GetString(1));
                            }
                        }
                    }

通过SqlCommand对象的ExecuteReader方法从数据源中检索数据来创建SqlDataReader对象。还得注意在读取完数据后,务必把DataReader对象关闭,否则当DataReader对象尚未关闭时,DataReader所使用的Connection对象就无法执行其他操作了。比较好的做法就是把这些全部放在using语句里面,让其自动完成关闭以及对象的回收工作,不必再让我们来操心了。

e.g:

       using (SqlConnection conn = new SqlConnection(Connstr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from Tbl_Students;";
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
MessageBox.Show(reader.GetString());
}
}
} }
}

4.使用DataSet和DataAdapter查询数据

DataSet可以看作是在内存中创建的一个小型关系数据库,它将数据库中的数据复制了一份放到用户本地(客户端)的内存中,供用户在不连接数据库的情况下读取数据,充分利用了客户端资源,大大降低了数据库服务器的压力。它是ADO.NET最核心成员之一,它是支持ADO.NET断开式、分布式数据方案的核心对象,也是非连接的数据查询的核心组件。

DataAdapter对象(数据适配器)是一种用来充当DataSet对象与实际数据源之间桥梁的对象,只要有DataSet的地方就有它,专门为DataSet服务的。它的工作方式一般有两种:一种是通过Command对象执行SQL语句从数据源中检索数据,将获取的结果集填充到DataSet对象的表中;另一种是把用户对DataSet对象作出的更改写入到数据源中。

       using (SqlConnection conn = new SqlConnection(Connstr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
//DataSet离线数据集
cmd.CommandText = "select * from Tbl_Students where Age<30;";
DataSet dataset = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
ShowDsTable(dataset.Tables[]);
for (int i = ; i <=dataset.Tables[].Rows.Count-; i++)
{
dataset.Tables[].Rows[i]["Name"] += i.ToString();
}
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.Update(dataset);
ShowDsTable(dataset.Tables[]);
}
}
} private void ShowDsTable(DataTable dataTable)
{
foreach (DataRow row in dataTable.Rows)
{
string name = (string)row["Name"];
int age = (int)row["Age"];
MessageBox.Show("Name:" + name + ",Age:" + age.ToString());
}
}

SqlCommandBuilder对象用于自动生成表单命令,将对DataSet所做的更改与关联的SQL Server数据库更改相协调。

最后还有一个就是可以通过SqlCommand.Parameters属性的参数传值防止SQL语句注入式攻击。

e.g:

普通的SQL语句:select * from Tbl_Students where Name='czh';

简单的SQL注入式攻击:select * from Tbl_Students where Name='czh' or '1'='1';

改成    cmd.CommandText = "select * from Tbl_Students where Name=@Name;";
          cmd.Parameters.AddWithValue("@Name", "czh");

就行啦。

关于ADO.NET基础的一些技术就是这些了,在C#里面连接SQL Server数据库主要就是SqlConnection、SqlCommand、SqlDataReader、DataSet以及SqlDataAdapter这几个类,需要重点掌握。实际开发中必须注意,必要时再打开数据库连接并尽早关闭,比较好的使将操作放在using语句里面,进行资源的自动释放。。。

后记:将近一个月没有更博了,也确实是太忙了,现在是大二下,几乎都是满课,实验还挺多的。前段时间还在做兼职,然后果断辞掉了,作为搞技术的,现在还是抓紧时间学技术为好,把一些时间抽去做兼职不仅赚不到多少钱,还把自己宝贵的时间给浪费了,累得不行不行的,真有点得不偿失的感觉。以后还是多更博,踏实学技术吧。大二下,时间也不太多了,技术渣渣的,课也是满满的,加油吧,哎!

ADO.NET基础开发的更多相关文章

  1. .Net Core 系列:2、ADO.Net 基础

    目录: 1.环境搭建 2.ADO.Net 基础 3.ASP.Net Core 基础 4.MD5.Sha256.AES 加密 5.实现登录注册功能 6.实现目录管理功能 7.实现文章发布.编辑.阅览和删 ...

  2. Centos 基础开发环境搭建之Maven私服nexus

    hmaster 安装nexus及启动方式 /usr/local/nexus-2.6.3-01/bin ./nexus status Centos 基础开发环境搭建之Maven私服nexus . 软件  ...

  3. ADO.NET基础03

    数据库和VS的连接,实现数据的同步,让用户的一切信息都可以在数据库中留下记录. ADO.NET基础      它是连接所有数据库的一种特殊的技术,提供对不同的数据库统一操作接口. 在VS中也可以添加数 ...

  4. Web基础开发最核心要解决的问题

    Web基础开发要解决的问题,往往也就是那些框架出现的目的 - 要解决问题. 1. 便捷的Db操作: 2. 高效的表单处理: 3. 灵活的Url路由: 4. 合理的代码组织结构: 5. 架构延伸 缓存. ...

  5. [Android] 环境配置之基础开发环境(SDK/Android Studio)(转)

    [Android] 环境配置之基础开发环境(SDK/Android Studio)   博客: blog.csdn.net/qiujuer 网站: www.qiujuer.net 开源库: Geniu ...

  6. SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题

    转:http://blog.csdn.net/miragesky2049/article/details/7204882 SharePoint2010沙盒解决方案基础开发--关于TreeView树形控 ...

  7. 零基础开发一款微信小程序商城

    零基础开发一款微信小程序商城 一个朋友问我能不能帮忙做个商城?我一个完整网页都写不出的 菜鸟程序员,我该怎么拒绝呢?好吧,看在小程序这么火的形势下,我还是答应了!找了个开源项目,差不多花了三天时间搞定 ...

  8. 有关ADO.NET基础中的基础的熟悉过程

    现在对于ADO.NET基础的理解与记忆并不严谨和完善 所以,只写一点关于自己的理解,嗯,一种去转换思维理解的方法吧,算是吧 希望各位前辈或者同学,积极指出其中的错误和偏差 个人对于刚接触的ADO.NE ...

  9. (2.15)Mysql之SQL基础——开发设计最佳规范

    (2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...

随机推荐

  1. HDU 5387 Clock(分数类+模拟)

    题意: 给你一个格式为hh:mm:ss的时间,问:该时间时针与分针.时针与秒针.分针与秒针之间夹角的度数是多少. 若夹角度数不是整数,则输出最简分数形式A/B,即A与B互质. 解析: 先计算出总的秒数 ...

  2. [Ramda] Convert a Promise.all Result to an Object with Ramda's zip and zipObj

    In this lesson, we'll use Promise.all to get an array that contains the resolved values from multipl ...

  3. .net core 下监控Sql的执行语句

    原文:.net core 下监控Sql的执行语句 最近在编写.net core程序,因为数据库从Sql Server 切换到 MySql的原因,无法直接查看sql的具体语句,随着业务量的剧增,痛苦也与 ...

  4. Spring学习笔记之六(数据源的配置)

    1.前言 上一篇博客分析了,Spring中实现AOP的两种动态代理的机制,以下这篇博客.来解说一下Spring中的数据源的配置.  2.DAO支持的模板类 Spring提供了非常多关于Dao支持的模板 ...

  5. try catch finally中的return

    try catch 中finally语句总是可以执行的,不管try中是否含有return语句 public class TestReturn { public static void main(Str ...

  6. 学习web开发遇到几个细节问题

    1.在jsp中使用jsp表达式在input标签中时,避免直接和结束"/"相连 2.提取input select 标签内的内容,使用...value提取其值 3.form中含有一个o ...

  7. Power control within a coherent multi-processing system

    Within a multi-processing system including a plurality of processor cores 4, 6operating in accordanc ...

  8. Unity UGUI——Rect Transform包裹(Anchor Presets)

    Anchor Presets使用演示样品物业 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5a6L5L2T/fonts ...

  9. 符号函数(sign function)性质及应用

    sgn(x):=⎧⎩⎨−101if x<0,if x=0,if x>0. 形式及描述较为简单的数学对象,更应当注意的便是其细节问题,对于 sign 函数(符号函数),便是自变量取值为 0 ...

  10. 利用WPF建立自己的3d gis软件(非axhost方式)(七)实现简单的粒子效果

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(七)实现简单的粒子效果 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew密 ...