使用 DbProviderFactory 访问数据库的问题
ADO.net中有SqlXXX,OledbXXX,OdbcXXX来操作数据库,但当数据库改变时却要修改所有相关代码,很不方便,于是就想到用工厂类来操作,但是当用:
DbProviderFactory factory= DbProviderFactories.GetFactory(providerString);
若 providerString是“System.Data.SqlClient”时,它和直接使用 SqlXXXX 去操作数据库有无效率上的差别呢?(问此是因为人们都说 SqlXXXX 是专为 MsSql 数据库操作设计的),O(∩_∩)O谢谢
------解决方案--------------------说了半天,原来你的意思是通过一个函数获取SqlConnection和直接调用构造函数得到SqlConnection的区别啊。那没有区别。我还以为你有什么SqlConnection的替代品呢。
------解决方案--------------------在dbhelper中最好不要暴露DBDataReader。因为SQL Server的provider就无法保证这个对象在多线程时独立地正常使用(你必须时刻警惕着关闭SqlConnection)。
在DbHelper中你可以直接得到强类型的对象集合,例如对于实体类型
public class MyObj
{
public string Name;
public double Value;
}
然后在查询中就可以写类似这样的代码(我没有测试,可能有语法错误,看懂就好):
List<MyObj> result;
using (var conn = db.DbConnection())
{
conn.Open();
var comm = conn.CreateCommand();
comm.CommandText = 从配置的资源文件中获取查询MyObj的语句;
comm.CommandType = System.Data.CommandType.Text;
result = ( from DbDataRecord record in comm.ExecuteReader()
let name = (string)record["TheName"]
select new MyObj{