C#成魔之路<5>ADO.NET数据访问技术(1)
2016-03-06 10:28
405 查看
1、ADO.NET简介
ADO.NET是一组面向.NET程序员公开数据范围跟服务的类。他为创建分布式数据共享应用程序提供了丰富的组件。提供了一系列方法,用于支持对MicroSoft SQL Server和XML等数据源进行访问,还提供了通过OLE DB和XML公开的数据源一致访问的方法。客户端应用程序可以使用ADO.NET来连接到数据源,并且查询添加、删除、更新所包含的数据。可以形象的把ADO.NET比喻为数据库应用程序和数据源之间的桥梁。提供了一个面向对象的数据访问架构。
ADO.NET支持两种访问数据的模式:无连接模式和连接模式。
无连接模式将数据下载到客户机器上,并在客户机上将数据封装到内存中,然后可以像访问本地关系数据库一样访问内存中的数据。(DataSet)
连接模式依赖于逐记录访问,这种访问要求打开并且保持和数据源的连接。
关于数据库的架构模型:如下:
数据源<->数据连接(Connection)<->Command<->数据适配器(DataReader,DataAdapter)<->数据集(DataSet->DataTable)
2、连接数据库:Connection对象
通过应用程序来操作数据库的数据,首要的是建立应用程序和数据库之间的连接通道。Connection对象就实现了这样一种功能。
(1)Connection对象概述
Connection对象是一个连接对象,主要功能是建立应用程序和物理数据库之间的连接通道,主要包括四种类型访问数据库的对象,分别对应着四种数据提供程序,在每种数据提供程序中都包含着一种数据库连接类型:
SQL Server数据提供程序。位于System.Data.SqlClient命名空间,类型为SqlConnection。
ODBC数据提供程序,位于System.Data.Odbc命名空间,类型为OdbcConnection。
OLEDB数据提供程序,位于System.Data.OleDb命名空间,类型为OleDbConnection。
Oracle数据提供程序,位于System.Data.OracleClient命名空间,类型为OracleConnection。
注意:连接数据库的时候,要根据使用数据库的不同,引入不同的命名空间,然后使用命名空间中指定的连接类来创建数据库连接对象。
(2)连接数据库
以SQL Server为例。如果要连接SQL Server数据库,必须使用System.Data.SqlClient命名空间下的sqlConnection类,首先要通过using命令引用命名空间。连接数据库之后调用sqlConnection对象的Open方法打开数据库。如果进一步判断数据库的连接状态,可以读取sqlConnection对象的State属性来实现。语法:
该属性值是ConnectionState类型的枚举值之一。其枚举值:
Broken:和数据源的连接中断。只有在连接打开后才可以发生这种情况。可以关闭处于这种状态的连接,然后重新打开。
Closed:连接处于关闭状态。
Connecting:连接对象正在和数据源连接。
Executing:连接对象正在执行命令。
Fetching:连接对象正在检索数据。
Open:连接处于打开状态。
示例程序:
sql server数据库连接字符串是sql server数据库中最重要的字符串之一,下面就将为您介绍sql server数据库连接字符串中常用的声明,供您参考。
sql server数据库连接字符串中常用的声明有:
服务器声明 Data Source、Server和Addr等。
数据库声明 Initial Catalog和DataBase等。
集成Windows账号的安全性声明 Integrated Security和Trusted_Connection等。
使用数据库账号的安全性声明 User ID和Password等。
对于访问数据库的账号来说,通常我们在一些参考资料上看到ADO.NET的字符串连接往往有如下写法:
string ConnStr = “server = localhost;
user id = sa; password = xxx; database = northwind”;
对于集成Windows安全性的账号来说,其sql server数据库连接字符串写法一般如下:
string ConnStr = “server = localhost;
integrated security = sspi; database = northwind”;
或string ConnStr = “server = localhost;
trusted_connection = yes; database = northwind”;
使用Windows集成的安全性验证在访问数据库时具有很多优势:安全性更高、访问速度更快、减少重新设计安全架构的工作、可以硬编码连接字符串等,还是很值得使用的。
(3)关闭连接
党对数据库操作完毕之后,要关闭和数据库的连接,释放占用的资源。通过调用sqlConnection对象的Close方法或者Dispose方法关闭和数据库的连接。这两种方法的主要区别是:Close方法用于关闭一个连接,而Dispose方法不仅关闭一个连接,而且还清理连接所占用的资源。
3、执行SQL语句:Command对象
当应用程序建立和数据源的连接之后,可以使用Command对象来执行命令并且从数据源中返回结果。
(1)Command对象概述
Command对象是一个数据命令对象,主要功能是向数据库发送查询、更新、删除、修改操作的SQL语句。Command对象主要有以下几个方式:
SqlCommand:用于向SQL Server数据库发送SQL语句,位于System.Data.SqlClient命名空间。
SqlDbCommand:用于向使用OLEDB公开的数据库发送SQL语句,位于System.Data.OleDb命名空间。
OdbcCommand:用于向ODBC公开的数据库发送SQL语句,位于System.Data.Odbc命名空间。有些数据库没有提供相应的连接程序,则可以配置好的ODBC连接之后,使用OdbcCommand。
OracleCommand:用于向Oracle数据库发送SQL语句。位于System.Data.OracleClient
注意:在使用OracleCommand向Oracle数据库发送SQL语句的时候,要引入System.Data.OracleClient命名空间,但是默认情况下没有这个命名控件,需要将程序集System.Data.OracleClient.dll引入到项目中。
(2)设置数据源类型
Command对象有三个重要的属性,分别是Connection属性、CommandText属性和CommandType属性。Connection属性用于设置SqlCommand使用的SqlConnnection。CommandText属性用于设置要对数据源执行的SQL语句或存储过程。CommandType属性用于设置指定的CommandText的类型。CommandType属性的值是CommandType枚举值。CommandType有三个枚举值:
StoredProcedure:存储过程的名称。
TableDirect:表的名称。
Text:SQL文本命令。
如果要设置数据源的类型。可以通过设置CommandType属性来实现,下面通过实例进行演示:
示例程序:关于Command属性的相关运用。
经典SQL语句大全
(3)执行SQL语句
Command对象需要取得将要执行的SQL语句,通过调用该类提供的多种方法,向数据库提交SQL语句。下面介绍SqlCommand几种执行SQL语句的方法。
ExecuteNonQuery方法
执行SQL语句,并且返回收到影响的行数。语法:
示例程序:
ExecuteReader方法
执行SQL语句,并且生成一个包含数据的SqlDataReader对象的实例。语法:
示例程序:
根据select*from tb_command 语句进行查询,调用ExecuteReader方法返回一个包含tb _command 表中所有数据的SqlDataReader对象。
ExecuteScalar方法
执行SQL语句,返回结果集当中的第一行的第一列。
语法:
该方法通常和聚合函数一起使用。
ADO.NET是一组面向.NET程序员公开数据范围跟服务的类。他为创建分布式数据共享应用程序提供了丰富的组件。提供了一系列方法,用于支持对MicroSoft SQL Server和XML等数据源进行访问,还提供了通过OLE DB和XML公开的数据源一致访问的方法。客户端应用程序可以使用ADO.NET来连接到数据源,并且查询添加、删除、更新所包含的数据。可以形象的把ADO.NET比喻为数据库应用程序和数据源之间的桥梁。提供了一个面向对象的数据访问架构。
ADO.NET支持两种访问数据的模式:无连接模式和连接模式。
无连接模式将数据下载到客户机器上,并在客户机上将数据封装到内存中,然后可以像访问本地关系数据库一样访问内存中的数据。(DataSet)
连接模式依赖于逐记录访问,这种访问要求打开并且保持和数据源的连接。
关于数据库的架构模型:如下:
数据源<->数据连接(Connection)<->Command<->数据适配器(DataReader,DataAdapter)<->数据集(DataSet->DataTable)
2、连接数据库:Connection对象
通过应用程序来操作数据库的数据,首要的是建立应用程序和数据库之间的连接通道。Connection对象就实现了这样一种功能。
(1)Connection对象概述
Connection对象是一个连接对象,主要功能是建立应用程序和物理数据库之间的连接通道,主要包括四种类型访问数据库的对象,分别对应着四种数据提供程序,在每种数据提供程序中都包含着一种数据库连接类型:
SQL Server数据提供程序。位于System.Data.SqlClient命名空间,类型为SqlConnection。
ODBC数据提供程序,位于System.Data.Odbc命名空间,类型为OdbcConnection。
OLEDB数据提供程序,位于System.Data.OleDb命名空间,类型为OleDbConnection。
Oracle数据提供程序,位于System.Data.OracleClient命名空间,类型为OracleConnection。
注意:连接数据库的时候,要根据使用数据库的不同,引入不同的命名空间,然后使用命名空间中指定的连接类来创建数据库连接对象。
(2)连接数据库
以SQL Server为例。如果要连接SQL Server数据库,必须使用System.Data.SqlClient命名空间下的sqlConnection类,首先要通过using命令引用命名空间。连接数据库之后调用sqlConnection对象的Open方法打开数据库。如果进一步判断数据库的连接状态,可以读取sqlConnection对象的State属性来实现。语法:
public override ConnctionState State{get;}
该属性值是ConnectionState类型的枚举值之一。其枚举值:
Broken:和数据源的连接中断。只有在连接打开后才可以发生这种情况。可以关闭处于这种状态的连接,然后重新打开。
Closed:连接处于关闭状态。
Connecting:连接对象正在和数据源连接。
Executing:连接对象正在执行命令。
Fetching:连接对象正在检索数据。
Open:连接处于打开状态。
示例程序:
sql server数据库连接字符串是sql server数据库中最重要的字符串之一,下面就将为您介绍sql server数据库连接字符串中常用的声明,供您参考。
sql server数据库连接字符串中常用的声明有:
服务器声明 Data Source、Server和Addr等。
数据库声明 Initial Catalog和DataBase等。
集成Windows账号的安全性声明 Integrated Security和Trusted_Connection等。
使用数据库账号的安全性声明 User ID和Password等。
对于访问数据库的账号来说,通常我们在一些参考资料上看到ADO.NET的字符串连接往往有如下写法:
string ConnStr = “server = localhost;
user id = sa; password = xxx; database = northwind”;
对于集成Windows安全性的账号来说,其sql server数据库连接字符串写法一般如下:
string ConnStr = “server = localhost;
integrated security = sspi; database = northwind”;
或string ConnStr = “server = localhost;
trusted_connection = yes; database = northwind”;
使用Windows集成的安全性验证在访问数据库时具有很多优势:安全性更高、访问速度更快、减少重新设计安全架构的工作、可以硬编码连接字符串等,还是很值得使用的。
namespace SQLtest1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "") { MessageBox.Show("please input the name of the database"); return; } try { //声明一个字符串用于存储连接数据库字符串 string strCon = "server=;database=" + textBox1.Text.Trim() + ";uid=sa; pwd="; //创建一个SqlConnectiond对象。 SqlConnection sqlConn=new SqlConnection(strCon); sqlConn.Open(); if(sqlConn.State==ConnectionState.Open) { label1.Text="已经打开数据库:"+textBox1.Text.Trim(); } } catch { MessageBox.Show("打开数据库失败!!"); } } } }
(3)关闭连接
党对数据库操作完毕之后,要关闭和数据库的连接,释放占用的资源。通过调用sqlConnection对象的Close方法或者Dispose方法关闭和数据库的连接。这两种方法的主要区别是:Close方法用于关闭一个连接,而Dispose方法不仅关闭一个连接,而且还清理连接所占用的资源。
namespace SQL_Test2 { public partial class Form1 : Form { SqlConnection conn; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "") { MessageBox.Show("please input the name of the database"); return; } try { //声明一个字符串用于存储连接数据库字符串 string strCon = "server=;database=" + textBox1.Text.Trim() + ";uid=sa; pwd="; //创建一个SqlConnectiond对象。 conn = new SqlConnection(strCon); conn.Open(); if (conn.State == ConnectionState.Open) { label1.Text = "已经打开数据库:" + textBox1.Text.Trim(); } } catch (Exception ex) { MessageBox.Show("打开数据库失败!!"); textBox1.Text = " "; } } private void button2_Click(object sender, EventArgs e) { try { string str = ""; conn.Close(); if (conn.State == ConnectionState.Closed) { str = "数据库已经成功关闭\n"; } conn.Open(); if (conn.State == ConnectionState.Open) { str += "数据库已经成功打开\n"; d8ee } richTextBox1.Text = str; } catch(Exception ex) { richTextBox1.Text = ex.Message; } } private void button3_Click(object sender, EventArgs e) { try { conn.Dispose(); conn.Open(); } catch(Exception ex) { richTextBox1.Text = ex.Message; } } } }
3、执行SQL语句:Command对象
当应用程序建立和数据源的连接之后,可以使用Command对象来执行命令并且从数据源中返回结果。
(1)Command对象概述
Command对象是一个数据命令对象,主要功能是向数据库发送查询、更新、删除、修改操作的SQL语句。Command对象主要有以下几个方式:
SqlCommand:用于向SQL Server数据库发送SQL语句,位于System.Data.SqlClient命名空间。
SqlDbCommand:用于向使用OLEDB公开的数据库发送SQL语句,位于System.Data.OleDb命名空间。
OdbcCommand:用于向ODBC公开的数据库发送SQL语句,位于System.Data.Odbc命名空间。有些数据库没有提供相应的连接程序,则可以配置好的ODBC连接之后,使用OdbcCommand。
OracleCommand:用于向Oracle数据库发送SQL语句。位于System.Data.OracleClient
注意:在使用OracleCommand向Oracle数据库发送SQL语句的时候,要引入System.Data.OracleClient命名空间,但是默认情况下没有这个命名控件,需要将程序集System.Data.OracleClient.dll引入到项目中。
(2)设置数据源类型
Command对象有三个重要的属性,分别是Connection属性、CommandText属性和CommandType属性。Connection属性用于设置SqlCommand使用的SqlConnnection。CommandText属性用于设置要对数据源执行的SQL语句或存储过程。CommandType属性用于设置指定的CommandText的类型。CommandType属性的值是CommandType枚举值。CommandType有三个枚举值:
StoredProcedure:存储过程的名称。
TableDirect:表的名称。
Text:SQL文本命令。
如果要设置数据源的类型。可以通过设置CommandType属性来实现,下面通过实例进行演示:
示例程序:关于Command属性的相关运用。
经典SQL语句大全
namespace SQLCommandTest { public partial class Form1 : Form { SqlConnection sqlConn = null;//声明一个变量 public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { sqlConn = new SqlConnection("server= ;database=;uid=;pwd="); sqlConn.Open(); } private void button1_Click(object sender, EventArgs e) { try { //判断打开连接或者文本框不为空 if (sqlConn.State == ConnectionState.Open || textBox1.Text != "") { SqlCommand sqlCmd = new SqlCommand(); //创建一个sqlCommand对象 sqlCmd.Connection = sqlConn; //设置Connection属性 sqlCmd.CommandText = "select count(*) from" + textBox1.Text.Trim(); //设置CommandText属性,设置SQL语句 sqlCmd.CommandType = CommandType.Text; //设置CommandType属性为Text,使其只执行SQL语句文本模式 int i = Convert.ToInt32(sqlCmd.ExecuteScalar()); // ExecuteScalar方法获取指定数据表中的数据数量 label2.Text = "数据表中有:" + i.ToString() + "条数据"; } } catch(Exception ex) { MessageBox.Show(ex.Message); } } } }
(3)执行SQL语句
Command对象需要取得将要执行的SQL语句,通过调用该类提供的多种方法,向数据库提交SQL语句。下面介绍SqlCommand几种执行SQL语句的方法。
ExecuteNonQuery方法
执行SQL语句,并且返回收到影响的行数。语法:
public override intExecuteNonQuery(); //该方法返回受影响的行数
示例程序:
namespace SQLCommandTest1 { public partial class Form1 : Form { SqlConnection sqlConn = null; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { sqlConn = new SqlConnection("server= ;database= ;uid= ;pwd= "); sqlConn.Open(); SqlCommand sqlCmd = new SqlCommand(); //创建一个command对象 sqlCmd.Connection = sqlConn; //设置Connection属性,指定使用conn作为数据库。 sqlCmd.CommandText = "update tb_command set 奖金=800 where 性别='女'"; //设置其属性为text,并且设置其执行的SQL语句。 sqlCmd.CommandType = CommandType.Text; //使用相关ExecuteNonQuery方法执行SQL语句。 int i = Convert.ToInt32(sqlCmd.ExecuteNonQuery()); label1.Text = "一共有:" + i.ToString() + "个员工收到奖金"; } } }
ExecuteReader方法
执行SQL语句,并且生成一个包含数据的SqlDataReader对象的实例。语法:
public SqlDataReader ExecuteReader() //返回一个SqlDataReader对象
示例程序:
根据select*from tb_command 语句进行查询,调用ExecuteReader方法返回一个包含tb _command 表中所有数据的SqlDataReader对象。
namespace SQLCommandTest2 { public partial class Form1 : Form { SqlConnection sqlConn = null; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { sqlConn = new SqlConnection("server= ;database= ;uid= ;pws= "); sqlConn.Open(); SqlCommand sqlCmd = new SqlCommand(); sqlCmd.Connection = sqlConn; sqlCmd.CommandText = "select*from tb_command"; sqlCmd.CommandType = CommandType.Text; SqlDataReader sdr = sqlCmd.ExecuteReader(); while (sdr.Read())//调用while语句读取 { listView1.Items.Add(sdr[1].ToString()); } sqlConn.Dispose();//释放连接。 button1.Enabled = false; //禁用按钮。 } } }
ExecuteScalar方法
执行SQL语句,返回结果集当中的第一行的第一列。
语法:
public override Object ExecuteScalar() //返回值为结果集中的第一行的第一列或者空引用。(如果结果集为空)
该方法通常和聚合函数一起使用。
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法