c# ADO.NET 访问数据库

ADO.NET 的主要组件

ADO.NET 结构图

.NET 数据提供程序类型

.NET Framework 数据提供程序

说 明

SQL Server .NET 数据提供程序

Microsoft SQL Server 数据源 System.Data.SqlClient 命名空间

OLE DB .NET 数据提供程序

Access 、OLE DB 公开的数据源 System.Data.OleDb 命名空间

ODBC .NET 数据提供程序

ODBC 公开的数据源 System.Data.Odbc 命名空间

Oracle .NET 数据提供程序

Oracle 数据源 System.Data.OracleClient 命名空间

 

Connection 对象

命名空间

对应的 Connection 对象

System.Data.SqlClient

SqlConnection

System.Data.OleDb

OleDbConnection

System.Data.Odbc

OdbcConnection

System.Data.OracleClient

OracleConnection

 

 1 // 定义数据库连接字符串
 2 string connString =
 3       "Data Source= . ;Initial Catalog=MySchool;User ID=jbit;pwd=bdqn";
 4 
 5 // 创建 Connection 对象
 6 SqlConnection connection = new SqlConnection(connString);
 7             
 8 // 打开数据库连接
 9 connection.Open();
10 Console.WriteLine("打开数据库连接成功");                
11             
12 //关闭数据库连接
13 connection.Close();
14 Console.WriteLine("关闭数据库连接成功");

Connection 主要成员

 

属性名称

 

说 明

 

ConnectionString

 

连接字符串

 

方法

 

说 明

 

Open()

 

打开数据库连接

 

Close()

 

关闭数据库连接

必须显式关闭连接

 

另一种实现:自动关闭数据

using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                   //代码块
                }
tip:当执行完该using(){}后,数据库连接就会自动关闭

连接数据库步骤

使用ADO.NET连接数据库的步骤

1.定义连接字符串

Data Source=服务器名;Initial Catalog=数据库名; User ID=用户名;Pwd=密码

2. 创建 Connection 对象

SqlConnection connection = new SqlConnection(connString);

3. 打开与数据库的连接

connection.Open( );

示例代码:

// 连接字符串
string connString =  "Data Source=.;Initial Catalog=pubs;User ID=sa";
// 创建Connection 对象       
SqlConnection connection = new SqlConnection(connString);
connection.Open( );  // 打开数据库连接
//……
connection.Close( ); // 关闭数据库连接

 


 

Command

Command 的主要成员

属性名称

说明

Connection

Command对象使用的数据库连接

CommandText

执行的SQL语句

方法

说 明

ExecuteNonQuery()

执行不返回行的语句,如UPDATE等

ExecuteReader()

返回DataReader对象

ExecuteScalar()

返回单个值,如执行带COUNT(*)的SQL语句

 

使用 Command 步骤

1. 创建数据库连接

2. 定义 SQL 语句

3. 创建 Command 对象(执行命令前,必须打开数据库连接!)

4. 执行命令

1 SqlConnection connection = new SqlConnection(connString);
2 string sql = "select count(*) from Admin where LoginId=' " + userName
3     + " ' and LoginPwd=' " + pwd + " ' ";
4 connection.Open();  // 打开数据库连接
5 SqlCommand command = new SqlCommand(sql, connection);
6 int num = (int)command.ExecuteScalar();

 

总结

一、.NET数据提供程序包括四个核心对象

Connection

Command

DataAdapter

DataReader

二、Connection对象用于建立应用程序和数据库之间的连接

三、Command对象的ExecuteScalar()方法可以检索数据库并返回一个值

四、数据库操作过程中可能出现异常,可以使用try-catch-finally语句处理异常

 

DataAdapter和DataReader的区别

SqlDataReader 高效,功能弱,只读访问
SqlDataAdapter 强大,要求资源也大一点

SqlDataReader 只能在保持跟数据库连接的状态下才可以读取。。。

SqlDataAdapter 大多情况下是一次性读取一个表,然后填充到DataSet中,然后就可以断开跟数据库的连接了。(可以理解查询出来的数据都放到的内存中)

两者区别主要是   在线 和 离线 的区别。。。。。

 


 

使用ADO.NET查询和操作数据

 

StringBuilder类

StringBuilder类: 用来定义可变字符串

方法

说明

StringBuilder Append(string value )

 

在结尾追加

 

StringBuilder Insert(int index, string value )

 

在指定位置插入指定字符串

 

StringBuilder Remove(int startIndex, int length )

 

移除指定字符串

 

以下SQL语句哪个可读性更高,更易修改?

代码一

SELECT SubjectNo,SubjectName,ClassHour,Grade FROM  Subject

 

代码二

SELECT
              [ SubjectNo ],
              [ SubjectName ],
              [ ClassHour ],
              [ Grade ]
FROM
              [ Subject ]

答案肯定是第二种

 

优势举例

常规

string strText  = "Hello";
strText += "World";
Console.WriteLine( strText );

优化后

使用StringBuilder类修改上述代码

 StringBuilder sbTest = new StringBuilder();
 sbTest.Append("Hello");
 sbTest.Append("World");
 Console.WriteLine(sbTest .ToString ());
 Console.ReadLine();

使用StringBuilder后,感觉代码更多了,我们为什么还要用它呢?

其实,我们在“常规”声明的string变量在2次赋值时,程序是给变量划分了2个内存空间,对计算机性能有损耗!

精准的说:“常规”每次修改strText,不是追加而是都要创建一个 新的字符串对象,如果用StringBuilder sbTest = new StringBuilder();创建对象做为变量,他不会有内存损耗,同样系统也不会多次创建对象。


 

DataReader读取数据库

DataReader 对象

1.从数据源中检索只读、只进的数据流

2.每次读取一行数据

命名空间

对应的 DataReader 对象

System.Data.SqlClient

System.Data.OracleClient

System.Data.OleDb

OleDbDataReader

System.Data.Odbc

OdbcDataReader

System.Data.OracleClient

OracleDataReader

 

 

要查询多行多列的数据,需要使用Command对象的ExecuteReader( )方法

 1 SqlDataReader reader = comm.ExecuteReader();//获得DataReader对象
 2 // 3 //循环读取数据行并显示
 4  while (reader.Read())
 5  {
 6              sb1.AppendFormat("{0}\t{1}", reader["StudentNo"], 
 7              reader["StudentName"]);
 8              Console.WriteLine(sb1);
 9              sb1.Length = 0;
10 }
11 //
12 reader.Close(); //关闭DataReader

DataReader 的主要成员

属性

说明

HasRows

是否返回了结果

方法

说明

Read

前进到下一行记录

Close

关闭 DataReader 对象
DataReader 使用后必须关闭

 

DataReader 使用步骤

使用 DataReader 检索数据的步骤

1. 创建 Command 对象

2. 调用 ExecuteReader() 创建 DataReader 对象

3. 使用 DataReader 的 Read() 方法逐行读取数据

4. 读取某列的数据,(type)dataReader[ ]

5. 关闭 DataReader 对象

 

读取某列的数据,(type)dataReader[ ]

获取某列的值:

方法一:指定列的索引,从0开始

方法二:指定列名


操作数据

 

使用SqlCommand对象的ExecuteNonQuery() 方法向数据库增加记录

 1 StringBuilder sb = new StringBuilder();
 2 sb.AppendLine("INSERT INTO");
 3 sb.AppendLine("          [Grade]");
 4 sb.AppendLine("VALUES");
 5 sb.AppendLine("           ('" + gradeName + "')");
 6 
 7 // 创建command对象
 8 SqlCommand command = new SqlCommand(sb.ToString(), conn);
 9 // 执行命令
10 command.ExecuteNonQuery();  
11 //……

 

ExecuteNonQuery()方法小结

1.该方法执行指定的 SQL 语句

2.返回受影响的行数

使用 ExecuteNonQuery() 的步骤

1.创建 Connection 对象

2.定义SQL语句

3.创建 Command 对象

4.执行 ExecuteNonQuery() 方法

5.根据返回的结果进行处理


总结

一、DataReader对象是一个只进、只读的数据流,每次从数据源中提取一条记录

二、通过Command对象的ExecuteReader()方法返回一个DataReader对象

三、使用Command对象的ExecuteNonQuery()方法可以执行数据源数据的增删改操作

 

转载于:https://www.cnblogs.com/cplvfx/articles/10452260.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值