在C#中使用mysql数据读取器时,我注意到一种奇怪的行为。 当我执行查询时,我得到的数据与我可以在阅读器对象中看到的数据相同。 但是,在调试期间,当我在此处停留一秒钟或毫秒时,数据将从读取器中消失,并显示“枚举未产生结果”。 下面是我的相同代码。 我找不到相同的解决方案。
public async Task<bool> SelectAsync(MySqlCommand command)
{
DbDataReader reader;
try
{
MySqlCommand cmd = command;
command.Connection = _connection;
reader = await cmd.ExecuteReaderAsync();
while (reader.Read())
{
// extracting fields from reader object code goes here
}
reader.Close();
return true;
}
catch (Exception ex)
{
//error log
_errorMessage = $"{ex}";
return false;
}
}
答案 0 :(得分:0)
如果在调试期间扩展了枚举从datareader枚举数据的任何阅读器集合,则CREATE TABLE `customers` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`full_name` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`email` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`address` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`type` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`customer_type` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
`account_type` ENUM('I','B') NOT NULL COMMENT 'I=>Individual, B=>Business' COLLATE 'utf8mb4_unicode_ci',
`company_name` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`po_box` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`office_fax` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`vendor_details` MEDIUMTEXT NULL COLLATE 'utf8mb4_unicode_ci',
PRIMARY KEY (`id`),
INDEX `customers_full_name_index` (`full_name`),
INDEX `customers_account_type_index` (`account_type`),
INDEX `customers_customer_type_type_index` (`customer_type`, `type`)
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1118
;
方法将自动在datareader对象上调用,并且该阅读器将前进至下一个记录或结束。因此,如果将其放置在末尾,则看不到任何记录。请注意,一旦到达读取器对象的结束位置,datareader就会为空。
我建议您在调试过程中不要显示任何读者结果集合,以解决此问题。
答案 1 :(得分:0)
如果要在调试模式或WATCH下查看对象的状态;将由数据库调用填充,您必须首先实现。