IDataReader用于通用访问

本文关键字:访问 用于 IDataReader | 更新日期: 2023-09-27 18:16:10

我想做一个"助手"类,你只需传递驱动程序和参数,类为你做连接和连接字符串组装。

我一直在使用System的接口。IDataReader、IDbConnection等数据

现在用MySQL测试后,代码工作完美,但一旦我指向并配置它为SQL Server(微软)它不返回任何处理的行。我做了一些调试和信息从SQL服务器出现在IDataReader,但似乎我不能迭代它?

我的当前代码:

帮助类中的连接方法

try
{
    factory = System.Data.Common.DbProviderFactories.GetFactory(driver);
    _con = factory.CreateConnection();
    _con.ConnectionString = buildConnectionString.ToString();
    _con.Open();
}
catch (System.Data.Common.DbException ex)
{
    _con = null;
    throw ex;
}
catch (Exception ex)
{
    _con = null;
    throw ex;
}
return _con;

A的时刻,我传递我的驱动程序为System.Data。SqlClient for SQL Server和MySql.Data。MySQL client

System.Data.IDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
while (reader.Read())
{
    System.Data.DataRow row = table.NewRow();
    // Insert info from Reader into the Row
    table.Rows.Add(row);
}
reader.Close();

我怀疑它与IDataReader如何试图处理类型有关,但找不到任何关于此的文档,因为它完美地适用于MySQL,但不适用于SQL Server?任何帮助吗?

IDataReader用于通用访问

这里没有给出太多线索,因为这里大多数有趣的代码都是可能是围绕命令设置的。如果在执行时,它从未进入while (reader.Read()) {...}块,那么可能是 TSQL或参数相关的(特别是null,这很容易导致没有行)。

因为您的数据是以DataTable为中心的,并且您已经有了提供者工厂,这里的另一种可能性是使用来自工厂的CreateDataAdapter(),并让工厂担心TSQL与DataTable的绑定。否则,三次检查您提供的TSQL是否有效、合理且参数化正确。

最终,Read()循环本身是好的,并且几乎是所有物化例程所做的。例如,它非常接近dapper的工作原理,并且在一系列数据库上工作得很好。