gpt4 book ai didi

c# - 用于通用访问的 IDataReader

转载 作者:行者123 更新时间:2023-11-29 00:51:38 27 4
gpt4 key购买 nike

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

我一直在使用 System.Data 的接口(interface),例如 IDataReader、IDbConnection。

现在,在使用 MySQL 对其进行测试后,代码可以正常运行,但是一旦我针对 SQL Server (Microsoft) 指向并配置它,它就不会返回任何已处理的行。我已经进行了一些调试,来自 SQL 服务器的信息出现在 IDataReader 中,但我似乎无法迭代它?

我当前的代码:

Helper 类中的 Connect 方法

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?有什么帮助吗?

最佳答案

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

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

最终,Read() 循环本身没问题,并且几乎是所有具体化例程所做的。例如,它非常接近 dapper 的工作方式,并且在一系列数据库上都运行良好。

关于c# - 用于通用访问的 IDataReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8311321/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com