当年学习ADO.NET的笔记

时间:2022-02-18 13:33:18

那些年学习了ASP.NET后又开始学习ASP.NET的新知识,ADO.NET用于访问数据库,一般可以分为连接模式和非连接模式。连接模式指的是在访问数据时,一直与数据库保持连接,访问完数据后才与数据库断开连接,主要采用的ADO.NET对象是Connection、Command、DataReader等;连接模式指的是通过数据集的方式对数据库进行操作,将数据读到内存中,从而完成数据的操作,数据集会自动更新到数据库,主要采用ADO.NET对象是DataAdapter、DataSet等。下面的我们就来看一下代码吧。 
本示例代码采用工厂模式的方式,这样就可以达到只改变少量的代码完成数据库之间的切换,工厂模式是要采用的对象有以下几个:DbProviderFactory、DbConnection、DbTransaction 
、DbCommand、DbDataReader、DbDataAdapter、DbCommandBuilder等。 

1、 共同的连接串 

复制代码代码如下:


string ProviderName = "System.Data.SqlClient"; 
string ConnStr = "Data Source=.;Initial Catalog=Northind;Integrated Security=True"; 
string sqlStr = "select * from dbo.Categories"; 



2、 非连接模式代码如下: 

复制代码代码如下:


public void getSqlConnection() 

//得到一个数据提供者,根据其传入的数据提供者对象 
DbProviderFactory dbf = DbProviderFactories.GetFactory(ProviderName); 
//创建连接 
DbConnection conn = dbf.CreateConnection(); 
//连接字符串 
conn.ConnectionString = ConnStr; 
conn.Open(); 
DbTransaction ts = conn.BeginTransaction(); 
DbCommand dbcmd = null; 
try 

dbcmd = dbf.CreateCommand(); 
dbcmd.CommandText = sqlStr; 
dbcmd.Connection = conn; 
dbcmd.Transaction = ts; 
DbDataReader dr = dbcmd.ExecuteReader(); 
while (dr.Read()) 

Console.WriteLine(dr[1].ToString()); 

dr.Close(); 
ts.Commit(); 

catch (Exception e) 

ts.Rollback(); 

finally 

conn.Close(); 
if (dbcmd != null) 

dbcmd.Dispose(); 



效果: 

当年学习ADO.NET的笔记

3、 连接模式代码: 

复制代码代码如下:


public void getDataSetConnection() 

//得到一个数据提供者,根据其传入的数据提供者对象 
DbProviderFactory dbf = DbProviderFactories.GetFactory(ProviderName); 
//创建连接 
DbConnection conn = dbf.CreateConnection(); 
//连接字符串 
conn.ConnectionString = ConnStr; 
//创建DataAdapter对象 
DbDataAdapter da = dbf.CreateDataAdapter(); 
//创建自动生成sql语句对象 
DbCommandBuilder dbCmdb = dbf.CreateCommandBuilder(); 
using (DbCommand dbcmd = dbf.CreateCommand()) 

dbcmd.CommandText = sqlStr; 
dbcmd.Connection = conn; 
//DbDataAdapter指定命令 
da.SelectCommand = dbcmd; 
//DbCommandBuilder指定dataAdpter 
dbCmdb.DataAdapter = da; 
DataSet ds = new DataSet(); 
da.Fill(ds); 
// ds.Tables[0].Rows[0].Delete(); 
da.Update(ds); 
DataTable dt = ds.Tables[0]; 
DataRow dr; 
for (int i = 0; i < dt.Rows.Count; i++) 

dr = dt.Rows[i]; 
Console.WriteLine(dr[1] + " " + dr[2]); 



效果: 

当年学习ADO.NET的笔记

以上是一个简单的例子,在正常情况下,就不会把连接串写成字符串,应放在config文件中,同样SQL语句也会改为存储过程,这样改起来比较方便。 

总结 

那些年学习ADO.NET,基本了解了怎样去访问数据库,对其进行操作,现在.NET又有了一些新的方法,比如说使用Linq、DbContext等;此文以回忆那些年学习的日子。