IDataReader for Generic Access

时间:2011-11-29 13:13:46

标签: c# mysql sql-server database ado.net

我正在尝试创建一个“Helper”类,您只需传递驱动程序和参数,类就会为您执行连接和连接字符串程序集。

我一直在使用System.Data中的接口,如IDataReader,IDbConnection。

现在用MySQL测试之后,代码运行得很好但是一旦我为SQL Server(Microsoft)指出并配置它,它就不会返回任何已处理的行。我做了一些调试,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;

我将驱动程序作为SQL Server的 System.Data.SqlClient 和MySQL的 MySql.Data.MySqlClient 传递给我。

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?任何帮助?

1 个答案:

答案 0 :(得分:1)

这里没有提供很多线索,因为这里的大部分有趣代码都是可能在命令设置周围。如果在执行时,它永远不会进入while (reader.Read()) {...}块,那么可能是 TSQL或参数相关(尤其是空值,这很容易导致没有行)。

由于您的数据是以DataTable为中心的,并且您已经拥有了提供商工厂,此处另一种可能性是使用工厂中的CreateDataAdapter(),让工厂担心TSQL绑定到DataTable。否则,请检查您提供的TSQL是否有效,合理且正确参数化。

最终,Read()循环本身很好,并且非常类似于所有实现例程。例如,它非常接近于精巧的工作方式,并且可以在一系列数据库中正常工作。