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?任何帮助吗?
这里没有给出太多线索,因为这里大多数有趣的代码都是可能是围绕命令设置的。如果在执行时,它从未进入while (reader.Read()) {...}
块,那么可能是 TSQL或参数相关的(特别是null,这很容易导致没有行)。
因为您的数据是以DataTable
为中心的,并且您已经有了提供者工厂,这里的另一种可能性是使用来自工厂的CreateDataAdapter()
,并让工厂担心TSQL与DataTable
的绑定。否则,三次检查您提供的TSQL是否有效、合理且参数化正确。
最终,Read()
循环本身是好的,并且几乎是所有物化例程所做的。例如,它非常接近dapper的工作原理,并且在一系列数据库上工作得很好。