.NET / Dapper / Oracle - 查询适用于一个 table,但 returns 对另一个无效
.NET / Dapper / Oracle - Query works for one table, but returns nothing for another
上下文
我有两个 table,FOO
和 BAR
。两者都有数据。我在 .NET 5 项目中使用 Dapper。当我尝试查询 FOO
时,得到的结果为零。当我使用相同的连接查询 BAR
时,我得到了预期的结果。怎么回事?
示例代码
using var connection = GetConnection();
await connection.OpenAsync(cancellationToken);
// THIS RETURNS ZERO RESULTS
var foos = await connection.QueryAsync("SELECT * FROM FOO");
// THIS RETURNS RESULTS AS EXPECTED
var bars = await connection.QueryAsync("SELECT * FROM BAR");
// THIS THROWS AN EXCEPTION (because the table doesn't exist)
var throws = await connection.QueryAsync("SELECT * FROM DOES_NOT_EXIST");
其他想法
- 我已经确认我的连接字符串是正确的
- 我已经确认
FOO
存在于我的连接字符串定义的数据库中
- 我已经确认
FOO
有数据
- 我已经确认我可以通过 Oracle SQL Developer
成功查询 FOO
FOO
是最近几天新创建的table
有人知道这里发生了什么吗?
或者可能会发生什么?
Does anybody know what's happening here?
已 INSERT
ed 但未 COMMIT
ed 的行仅在创建它们的会话中可见。因此,如果您创建了一些新行但没有在 SQL 开发人员会话中发出 COMMIT
命令,您将无法从任何其他会话中看到未提交的数据(即使您连接为相同的用户,因为它将创建不同的会话)。
如果是这种情况,解决方案是 COMMIT
SQL 开发人员会话中的数据,然后其他会话就可以看到这些数据。
上下文
我有两个 table,FOO
和 BAR
。两者都有数据。我在 .NET 5 项目中使用 Dapper。当我尝试查询 FOO
时,得到的结果为零。当我使用相同的连接查询 BAR
时,我得到了预期的结果。怎么回事?
示例代码
using var connection = GetConnection();
await connection.OpenAsync(cancellationToken);
// THIS RETURNS ZERO RESULTS
var foos = await connection.QueryAsync("SELECT * FROM FOO");
// THIS RETURNS RESULTS AS EXPECTED
var bars = await connection.QueryAsync("SELECT * FROM BAR");
// THIS THROWS AN EXCEPTION (because the table doesn't exist)
var throws = await connection.QueryAsync("SELECT * FROM DOES_NOT_EXIST");
其他想法
- 我已经确认我的连接字符串是正确的
- 我已经确认
FOO
存在于我的连接字符串定义的数据库中 - 我已经确认
FOO
有数据 - 我已经确认我可以通过 Oracle SQL Developer 成功查询
FOO
是最近几天新创建的table
FOO
有人知道这里发生了什么吗?
或者可能会发生什么?
Does anybody know what's happening here?
已 INSERT
ed 但未 COMMIT
ed 的行仅在创建它们的会话中可见。因此,如果您创建了一些新行但没有在 SQL 开发人员会话中发出 COMMIT
命令,您将无法从任何其他会话中看到未提交的数据(即使您连接为相同的用户,因为它将创建不同的会话)。
如果是这种情况,解决方案是 COMMIT
SQL 开发人员会话中的数据,然后其他会话就可以看到这些数据。