我正在尝试创建一个“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?任何帮助?
答案 0 :(得分:1)
这里没有提供很多线索,因为这里的大部分有趣代码都是可能在命令设置周围。如果在执行时,它永远不会进入while (reader.Read()) {...}
块,那么可能是 TSQL或参数相关(尤其是空值,这很容易导致没有行)。
由于您的数据是以DataTable
为中心的,并且您已经拥有了提供商工厂,此处另一种可能性是使用工厂中的CreateDataAdapter()
,让工厂担心TSQL绑定到DataTable
。否则,请检查您提供的TSQL是否有效,合理且正确参数化。
最终,Read()
循环本身很好,并且非常类似于所有实现例程。例如,它非常接近于精巧的工作方式,并且可以在一系列数据库中正常工作。