一、介绍
ado.net是.net framework的数据提供程序,它主要有SqlConnection、SqlCommand、SqlDataAdapter、SqlDataReader和DataSet五大对象构成,结构如下图
1.SqlConnection类表示一个sql server数据库的一个连接 连接字符串格式一般有如下两种形式,具体参数可以参照msdn
1)Persist Security Info=False;Integrated Security=true;Initial Catalog=Northwind;server=(local) 2)Server=.;Database=demodb;User=sa;Password=123;연결 문자열 형식은 일반적으로 다음 두 가지 형식을 갖습니다. 매개변수는 msdn을 참조할 수 있습니다.
创建一个连接如下
SqlConnection
conn =다음과 같이 연결을 생성하세요 new
connString); 2.SqlCommand类表示数据库执行命令对象 SqlConnectionnew
SqlCommand cmd =
new SqlCommand (); 1) 실행해야 하는 SQL 스크립트나 저장 프로시저, 타임아웃, 매개변수, 트랜잭션 등을 설정하는 데 사용합니다.
cmd.CommandText = "select * from table" ; 2) 생성 방법은 다음과 같습니다.
cmd.Connection = conn; 3)几个主要方法 ExecuteNonQuery:对连接执行sql语句并返回受影响行数,主要执行增、删和改操作 🎜 🎜🎜🎜 🎜 🎜🎜 🎜🎜🎜🎜🎜🎜🎜
🎜🎜
🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 conn.CreateCommand🎜🎜🎜
🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜
🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜
🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 cmd.CommandText =🎜🎜🎜🎜
🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜 cmd.Connection = conn🎜
🎜 🎜 🎜 🎜 🎜 3 ) 여러 가지 주요 메서드
🎜 🎜 🎜 🎜 🎜🎜🎜ExecuteNonQuery: 연결에서 SQL 문을 실행하고 영향을 받은 행 수를 반환하며 주로 추가, 삭제 및 작업 수정ExecuteReader:执行查询返回SqlDataReader对象
ExecuteScalar:执行查询返回结果集中的第一行和第一列
3.SqlDataAdapter类用来填充DataSet和更新数据库数据命令和数据库连接
该类有4种构造函数如下 이 클래스에는 다음과 같은 4개의 생성자가 있습니다.
public SqlDataAdapter(); 스팬 >
public SqlDataAdapter(SqlCommand selectCommand);
public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection);
public SqlDataAdapter(string selectCommandText, string selectConnectionString); 4.SqlDataReader
类提供一种数据流只进方式读取 5.DataSet
类表示数据在内存中的缓存二、ADO.NET简单实现 下面实现一个增、删、改、查的例子
public class EasySqlHelper
{
//web.config来配置
//private static string connString = ConfigurationManager.AppSettings["SqlConnectionString"];
private static string connString = "Server=.;Database=demodb;User=sa;Password=123;";
public static int ExecuteNonQuery(string sql)
{
using (SqlConnection conn = new SqlConnection(connString))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
return cmd.ExecuteNonQuery();
}
}
}
public static SqlDataReader ExecuteReader(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader rdr = null;
try
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
rdr = cmd.ExecuteReader();
}
catch (SqlException ex)
{
conn.Dispose();
cmd.Dispose();
if (rdr != null)
{
rdr.Dispose();
}
throw ex;
}
finally
{
cmd.Dispose();
}
return rdr;
}
public static DataTable ExecuteDataTable(string sql)
{
using (SqlConnection conn = new SqlConnection(connString))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds);
return ds.Tables[0];
}
}
}
}
上面代码中使用using来确保资源释放,所有实现IDisposable接口的类都可以用using来释放,即使在调用对象的方法上发生异常也会释放。다음은 추가, 삭제, 수정, 확인 예시입니다
上面代码只对sql server有效,如果要实现不同数据库如oracle则又需要另外写一套代码,.Net提供了DbProviderFactory类来创建不同数据库实例。
同时上面5大对象也要换成DbConnection、DbCommand、DbDataReader、DbDataAdapter把具体sql server对象抽象成更具体和数据库类型无关对象。
//// <summary> /// 连接信息 /// </summary> public class ConnectionInfo { private string _connectionString; private string _providerName; /// <summary> /// 连接字符串 /// </summary> public string ConnectionString { get { return _connectionString; } } /// <summary> /// 提供程序的固定名称 /// </summary> public string ProviderName { get { return _providerName; } } public ConnectionInfo(string connectionString, string providerName) { _connectionString = connectionString; _providerName = providerName; } } public class MySqlHelper { private static DbProviderFactory dbProvider; private static readonly ConnectionInfo connInfo = new ConnectionInfo("Server=.;Database=demodb;User=sa;Password=123;", "System.Data.SqlClient"); private static void GetProvider() { dbProvider = DbProviderFactories.GetFactory(connInfo.ProviderName); } static MySqlHelper() { GetProvider(); } public static int ExecuteNonQuery(string sql, DbParameter[] parameters) { int flag = 0; using (DbConnection conn = dbProvider.CreateConnection()) { conn.ConnectionString = connInfo.ConnectionString; conn.Open(); using (DbCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; if (parameters != null && parameters.Length > 0) { cmd.Parameters.AddRange(parameters); } flag = cmd.ExecuteNonQuery(); } } return flag; } public static void ExecuteReader(string sql, DbParameter[] parameters, Action<IDataReader> action) { IDataReader rdr = null; using (DbConnection conn = dbProvider.CreateConnection()) { conn.ConnectionString = connInfo.ConnectionString; conn.Open(); using (DbCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; if (parameters != null && parameters.Length > 0) { cmd.Parameters.AddRange(parameters); } rdr = cmd.ExecuteReader(); action(rdr); rdr.Close(); } } } public static DataTable ExecuteDataTable(string sql, DbParameter[] parameters) { DataTable dt = null; using (DbConnection conn = dbProvider.CreateConnection()) { conn.ConnectionString = connInfo.ConnectionString; conn.Open(); using (DbCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; if (parameters != null && parameters.Length > 0) { cmd.Parameters.AddRange(parameters); } IDataReader rdr = cmd.ExecuteReader(); dt = new DataTable(); dt.Load(rdr); rdr.Close(); } return dt; } } }
四、其它第三方框架동시에 위의 5개 주요 개체도 DbConnection, DbCommand, DbDataReader 및 DbDataAdapter로 대체되어 특정 SQL Server 개체를 더 많은 개체로 추상화해야 합니다. 데이터베이스 유형과 관련이 없는 특정 개체입니다.
【相关推荐】
1.
ASP.NET免费视频教程
p>1.2. C#使用Ado.Net更新和添加数据到Excel表格的方法
2 .3. ADO.NET 读取EXCEL的实现代码((c#))
3.4. ADO.NET调用存储过程
4.5. ado.net 连接vs 数据库代码
5.🎜🎜
위 내용은 ado.net이란 무엇이며 간단한 구현 세부 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!