您的位置:首页 > 其它

ADO.Net 浅析(三)

2009-07-12 11:44 253 查看

ADO.Net 浅析(三)

对于第一篇文章,我个人比较满意,至少是把代码注释得比较浅显易懂了.

下面是对前面文章的一些补充

关于sqlcommand,



而其后又对这个进行了一些补充

如果使用 SQL Server 2005 之前的 SQL Server 版本,在使用 SqlDataReader 时,关联的 SqlConnection 将忙于为 SqlDataReader 服务。当处于此状态时,除了关闭 SqlConnection 外,不能对其执行其他任何操作。除非调用 SqlDataReader 的 Close 方法,否则会一直处于此状态。从 SQL Server 2005 开始,多活动结果集 (MARS) 功能允许多个操作使用同一连接。

关于ExecuteReader 方法的一些细节:

1.执行返回行的命令。为了提高性能,ExecuteReader 使用 Transact-SQL sp_executesql 系统存储过程调用命令。因此,如果 ExecuteReader 用于执行命令(例如 Transact-SQL SET 语句),则它可能不会产生预期的效果。

MSSQL 为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能(对于这个我在后面的例子中会详加说明),还可以编写更安全的代码。EXEC在某些情况下会更灵活。除非您有令人信服的理由使用EXEC,否侧尽量使用 sp_executesql.

下面是一个使用datareader的实例

public void dbprovider()
{
string dp = ConfigurationManager.ConnectionStrings["AdWEntities"].ProviderName;//取得config文件中的providername
string connstr = ConfigurationManager.ConnectionStrings["AdWEntities"].ConnectionString;//取得ConnectionString

DbProviderFactory df = DbProviderFactories.GetFactory(dp);//创建provierfactory实例,用来生成connection和command对象的实例;

DbConnection conn = df.CreateConnection();

conn.ConnectionString = connstr;

conn.Open();

DbCommand dbcmd = df.CreateCommand();
dbcmd.Connection = conn;
dbcmd.CommandType = CommandType.StoredProcedure;//设置CommandType 为存储过程
dbcmd.CommandText = "uspGetEmployeeManagers";//设置存储过程名

DbParameter dbp = new SqlParameter("@BusinessEntityID", SqlDbType.Int);
dbp.Value = "2";//生成参数对象
dbcmd.Parameters.Add(dbp);

DbDataReader rd = dbcmd.ExecuteReader(CommandBehavior.CloseConnection);//CommandBehavior.CloseConnection参数,当rd.close()时,关闭connection

while (rd.Read())
{
Console.WriteLine("empName {0} {1},\r\nmanagerName{2} {3}", rd[2], rd[3],rd[5],rd[6]);
}
rd.Close();

}

首先是一段对配置文件的使用.

ConfigurationManager.ConnectionStrings属性可以使用config文件中的节点如下

<connectionStrings>
<add name="AdWEntities" connectionString="Data Source=localhost;Initial Catalog=AdventureWorks2008;User ID=sa;Password=pass;" providerName="System.Data.SqlClient"/>
</connectionStrings>

通过工厂模式,以字符串的方式来生成实例,可以使datareader的生成与具体数据库无关,很好的封装了变化,sqlparameter的使用破坏了这种封装,以后的篇幅里会有关于设计模式的讨论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: