日期:2014-05-17  浏览次数:20471 次

使用 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{