- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚注意到在 MySQL 和 SQL Server 上运行的 ASP.NET 应用程序中有一个奇怪的行为。
应用程序通过 EF 连接发出纯 SQL 查询以构建数据集。结果集不包含任何主代理键(主键不是 SELECT
语句的一部分)。查询非常复杂,我不允许展示它们,但我可以非常清楚地解释发生了什么。
给定查询为
select a.A01, a.A01a, a.A01b, a.A02, a.A03, A11, A12, A12a, A12b, A12c, A21, A22, A23, A24, A25, A31, A31a, A31b, A32, A33, A33a, A33b, A33c, A34, A41, A42, A43, A51, A52, A53, A54, A54a, A54b, A54c, B11, B12, B13, B14, B15, Z0, a.prog, a.utente, C11, D11, D13, D14, D14a, D14b, D14c, D15, D16, D17, D18, D19, D21, D22, D23, D31, D32, D41, D42, D43, D44, D45, Z1
FROM TABLE_A JOIN TABLE_B
WHERE SOME_CONDITION
ORDER BY a.a21 ASC, a.a03 ASC LIMIT 20000
以下代码片段发出查询:
protected DataTable GetDataTableV1(string aSqlStatement)
{
DataTable dtResult = new DataTable();
using (DbContext dataContext = GetDataContext())
{
using (IDbConnection connection = dataContext.Database.Connection)
{
connection.Open();
using (IDbCommand command = connection.CreateCommand())
{
command.CommandText = aSqlStatement;
using (IDataReader reader = command.ExecuteReader())
{
dtResult.Load(reader);
}
}
}
}
return dtResult;
}
查询在 Workbench 和 SMSS 中运行,在我的案例中返回 1192 个结果。没事儿。但是当应用程序在 MYSQL 上运行时,我只得到 1156 个结果!
如果我调试到在 MySQL 上运行的 dtResult.Load(reader);
,我会得到一个意外的行为(并且只在 MySQL 上):reader 由 1192 个结果组成。
显然,从调试中读取 DataReader 会消耗它,所以我可以再次调试它。现在显示1156条记录!
由于代码中的“导出为 CSV”功能,我检查了结果数据集。还记得查询是按字段 A21
和 A03
升序排列的吗?看起来虽然这些字段不是主键的一部分、唯一的、不同的或其他任何内容,但 DataTable 会删除具有匹配对的行。
我的意思是,分析生成的数据集,在 MS SQL 数据集中存在但在 MySQL 数据集中缺失的每一行都显示完全相同的一对下面截图的第 1 列和第 3 列作为下一个。在我的示例中,这些列分别是 C
和 N
。而且,这些列不是主键的一部分
为什么 DataTable 在 MySQL 上只表现得像这样?如何将完整的结果集包含在我的 DataTable 中?
最佳答案
解决方案是将整个查询包装在 SELECT
语句中,完全按照描述 here
关于c# - DataTable.Load 显示的行数少于源 DataReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676382/
是 dataReader[i] 逻辑上等价于 dataReader.GetValue(i) 他们是一样的吗?它们不同吗?是否存在一种情况比另一种更合适的情况? 有documented differen
我有一个 DataReader...我将 DataReader 的结果用作另一个 DataReader 的参数,该 DataReader 连接到具有存储过程类型的命令。它现在工作得很快,但我担心我的数
我正在尝试验证我的数据库中经过哈希处理和加盐处理的密码。我在用户表用户名、哈希值和盐中创建了一列。现在我想知道我可以使用数据读取器访问其他列值。 我尝试了这个方法,但出现了一条红线。这也是我失败的尝试
正如您可能已经从标题中猜到的,我正在尝试这样做: #region check new nations private void checknewnations() {
我正在实现 IDataReader,我想知道 Dispose 的实现是否应该调用 Close。 此外,Close 是否应该调用 Dispose? 我的猜测是 Close 不应调用 Dispose 而
类似于this question ,但答案从来没有真正解决我想知道的问题。从 DataReader 获取值是否有任何标准?即,是这个 dataReader.GetString(dataReader.G
Microsoft(和许多开发人员)claim SqlDataReader.GetOrdinal 方法提高了从 DataReader 检索值的性能,而不是使用命名查找,即。读者[“列名”]。问题是什么
我们正在使用 Dapper 来映射我们的 sql 数据,到目前为止它运行良好。我有一个案例,我们正在做类似的事情: someObject = con.Query("GetInfoSproc", p,
let reader = selectCommand.ExecuteReader() let getBytesData (x : IDataReader) = let len = reader
所以我对市场之间的冗余标签名称有点问题。例如在使用以下代码获取数据时: from pandas_datareader import data as pdr from datetime import d
我有一个相当复杂的 SQL 查询,它根据客户 ID 从数据库中提取不同类型的产品。它提取三种不同类型的产品,由其唯一标识符编号范围标识(即,ID 1000-1999 是一种产品,2000-2999 是
我的目标是从数据源检索数据,向其中添加一些元数据并将其插入到另一个目标。 目标的架构比源(计算列)多四列。 我正在使用 SqlBulkCopy,它需要一个具有所有列(包括 4 个计算的列)的读取器。
所以基本上我的应用程序中有两个连接: conn = new MySqlConnection("server=" + ip + ";uid=" + user +";pwd=" + pass + ";da
我使用下面的代码在 C# 中从 mySql 获取数据。当我这样做时,我收到代码下方提到的错误。我发现了一些关于这个主题的问题,但他们使用了 DataReader,而我没有。 MySqlConnecti
我使用 EF+MySql,数据库包含两个 foriegnkey,当我运行我的项目时,它说:已经有一个打开的 DataReader 与此连接关联,必须先关闭,然后我将 MultipleActiveRes
我正在尝试创建一个基于变量的DataReader。我需要根据选择了 TreeView 中的哪个节点来填充一系列 TextBoxes,并且父节点数据与子节点数据不同。所以,我写了这段代码: using
我遇到了一个错误,提示我的数据读取器已经打开。 我的代码是这样的 public static Users GetByID(int ID, SqlConnection connection) {
我想做的与 OP 在此处提出的要求类似: Multiples Table in DataReader 我试图将一个或多个 SQL 查询的结果存储到单独的数据表中。上述问题的方法的问题在于它仅适用于每个
我正在遍历我的数据库以显示球员关联的联赛列表。如果玩家不是任何联盟的成员,则会显示一条消息告诉他们。 这是代码 if (dReader.Read()) { while (dR
我只是使用 pandas datareader 来获取过去两周左右的股票数据,它运行良好。突然间,从昨天开始,所提供的日期就不再有效了。它只是给我过去一年的数据,我无法更改日期。曾经与注释掉的那个一起
我是一名优秀的程序员,十分优秀!