这篇文章给大家分享的是有关什么是ado.net的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
一、介绍
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;
创建一个连接如下
SqlConnection conn = new SqlConnection(connString);
2.SqlCommand类表示数据库执行命令对象
1)用来设置需要执行的sql脚本或存储过程、超时时间、参数和事务等。
2)创建方式如下
SqlConnection conn = new SqlConnection();
//方式一
conn.CreateCommand();
//方式二
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from table" ;
cmd.Connection = conn;
3)几个主要方法
ExecuteNonQuery:对连接执行sql语句并返回受影响行数,主要执行增、删和改操作
ExecuteReader:执行查询返回SqlDataReader对象
ExecuteScalar:执行查询返回结果集中的第一行和第一列
3.SqlDataAdapter类用来填充DataSet和更新数据库数据命令和数据库连接
该类有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;
}
}
}
感谢各位的阅读!关于什么是ado.net就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。