问题标签 [dbdatareader]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何轻松地将 DbDataReader 对象转换为有用的东西?
我正在使用实体框架 EntityConnection 手动调用存储过程,如下所示:
这样做的原因是实体框架不容易支持不直接映射到表或视图的实体。我找到了这篇文章 ( http://dotnet.dzone.com/news/mapping-stored-procedure ),但它需要编辑 XML,我想避免这种情况。
就我而言,我只是在运行一个使用 LEFT JOIN 连接两个表的查询。这样做的原因是因为我试图将结果绑定到 Telerik RadGrid,它不支持分层数据导出,但似乎支持分组数据导出。
问题是,如何将 DbDataReader 对象转换为可以绑定到 RadGrid 的有用对象?我一直在我的 DAL 方法中传递单个对象或 IQueryable 对象。有任何想法吗?提前致谢?
编辑:
我只需要数据。之后我不需要做任何插入、更新、删除。它是一个只读视图。
c# - 如何最好地使用 C# DbDataReader 循环一批结果
我正在批量执行一些 SQL 查询,然后将所有结果集批量取回。我的代码当前放在一起的方式,第一个结果集被跳过。既然我知道了这一点,我可以简单地在我的循环之外添加另一个语句来获取第一个结果,但是我想知道是否有更优雅的解决方案来解决这个问题。
这是发生了什么的一些 sudo 代码:
现在我本来希望 NextResult() 在您第一次调用它时将您推进到第一个结果,这就是 Read() 似乎所做的。然而,它实际上似乎做的是在第一次通话时将您带到第二个结果。我是否误解了您应该如何使用此方法,或者您是否真的希望执行以下操作:
这让我觉得编程风格很烂,但我看不出有什么办法。有谁知道对此有更优雅的解决方案?
c# - 使用 ToList 后出现“行/列不存在数据”异常
我有一个将 DbDataReader 转换为 IEnumerable 对象的扩展方法:
在我的应用程序中,我像这样查询数据库:
然后,我枚举每条记录并获取 WRKORDNBR 字段的值:
这以前工作得很好。现在,我费心转换 DbDataReader 的原因是因为我需要在 foreach 块之前对记录执行 LINQ 查询。如您所知,DbDataReader 中的记录只能枚举一次(或者我完全遗漏了什么)?这意味着我必须将 AsEnumerable 的结果复制到 List 中,以便可以多次枚举它们。
至少,我认为这是我必须做的。但是当我更改我的 foreach 循环以迭代临时集合时,我得到:
InvalidOperationException:行/列不存在数据
我在这里想念什么?
sql - SqlDataReader / DbDataReader 实现问题
有谁知道 DbDataReaders 是如何工作的。我们可以使用 SqlDataReader 作为示例。
当您执行以下操作时
数据读取器是否在内存中拥有所有行,或者它只是抓取一个,然后当调用 Read 时,它会去数据库并抓取下一个吗?似乎只是将一个带入内存会带来不好的性能,但是将它们全部带入会使调用 ExecuteReader 需要一段时间。
我知道我是对象的消费者,他们如何实现它并不重要,但我只是好奇,我想我可能会在 Reflector 上花几个小时来了解它在做什么,所以想我会问一个可能知道的人。
我只是好奇是否有人有想法。
.net - ADO.Net - 同时运行多个 DBDataReader?
当我同时有多个DBDataReaders
读取数据时,我收到以下错误:
我在我的配置中启用了 ConnectionPooling,所以我不明白为什么会收到此错误。由于我当前的连接已经在使用中,它不应该创建一个新连接吗?
我知道设置MultipleActiveResultSets
为 true 可以解决问题,但我仍在尝试了解问题存在的原因
c# - 在 DataTable 中加载 DataReader 时出现约束异常
我对 SQL2008 数据库运行合并查询,该数据库使用以下 c# 代码返回合并的输出:
最后一行抛出错误:
System.Data.ConstraintException - 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。
我在 MSDN 上找到了这个,它适合我的场景,但我该如何解决这个问题呢?
清除主键dt.PrimaryKey=null;
不起作用
上面的代码将用于许多表。
c# - 在迭代 DbDataReader 之前处理 DbCommand 是否可以
我有一个简单的应用程序,需要执行某些查询来获取数据库模式信息。我写了一个简单的方法来执行查询并返回一个阅读器,就像这样 -
调用代码确实关闭了连接并适当地配置了阅读器和连接。
我的问题 - 在迭代阅读器之前处理命令实例(通过 using 块完成)是否可以/正确?我不希望在关闭阅读器后填充任何 OUT 参数。ADO.NET API 对此是否有任何严格的指导方针?
c# - DbDataReader 错误:阅读器关闭时调用 Read 的尝试无效
您好我正在尝试从一个方法返回 DataReader,但它在那里返回一个封闭的 DbDataReader 对象。任何想法来解决这个问题。我愿意接受任何使代码更好的建议。
谢谢
更新 我不想让数据库连接保持打开状态。关闭连接后有什么方法可以返回打开的 DataReader。
sql - 如何在实体框架中直接获取 DbDataReader 对象?
根据 MSDN (http://msdn.microsoft.com/en-us/library/dd487208.aspx),DbDataReader
在实体框架中运行 SQL 查询的过程中创建了一个名为的对象。
实体框架将其“翻译”DbDataReader
为实体类。
如何直接访问 DbDataReader?
asp.net - 在高流量场景中使用 Dapper.Net 时打开 DataReader 问题 - 现在要解决吗?
下面是使用 Dapper.Net 在 DAL 中调用数据的示例:
我们看到的一致错误如下:
2012-06-20 11:42:44.8903|致命|已经有一个打开的 DataReader 与此命令关联,必须先关闭。| 在 System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand 命令) 在 System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String 方法,SqlCommand 命令) 在 System.Data.SqlClient.SqlCommand.ValidateCommand(String 方法,布尔异步) 在 System System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 在系统。 Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,
在 MyApp.DAL.DapperORM.SqlMapper.d_ 131.MoveNext() in C:\Projects\Git\MyApp\MyApp.DAL\MyApp.DAL.MyAppPrimary.Repositories\Dapper\SqlMapper.cs:line 581 at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 源) 在 MyApp.DAL.DapperORM.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable1 commandTimeout, Nullable
1 commandType) 在 C:\Projects\Git\MyApp\MyApp.DAL\MyApp.DAL.MyAppPrimary.Repositories\Dapper\SqlMapper.cs:C 中 MyApp.DAL.Repositories.MemberRepository.AddNotificationEntry(NewsfeedNotification notificationEntry) 的第 538 行: \Projects\Git\MyApp\MyApp.DAL\MyApp.DAL.MyAppPrimary.Repositories\MemberRepositories\MemberRepository.cs:line 465 2012-06-20 11:42:45.2491|致命|当阅读器关闭时调用读取无效。 | 在 System.Data.SqlClient.SqlDataReader.ReadInternal(布尔 setTimeout)
在 System.Data.SqlClient.SqlDataReader.Read() 在 MyApp.DAL.DapperORM.SqlMapper.d _131.MoveNext() in C:\Projects\Git\MyApp\MyApp.DAL\MyApp.DAL.MyAppPrimary.Repositories\Dapper\SqlMapper.cs:line 597 at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 源) 在 MyApp.DAL.DapperORM.SqlMapper.Query[T](IDbConnection cnn, String C:\Projects\Git\MyApp\MyApp.DAL\MyApp.DAL.MyAppPrimary.Repositories\Dapper\SqlMapper.cs 中的sql、对象参数、IDbTransaction 事务、布尔缓冲、可空1 commandTimeout, Nullable
1 命令类型):MyApp.DAL 的第 538 行。 DapperORM.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable1 commandTimeout, Nullable
1 commandType) 在 C:\Projects\Git\MyApp\MyApp.DAL\MyApp.DAL.MyAppPrimary.Repositories\Dapper\SqlMapper.cs:C 中 MyApp.DAL.Repositories.MemberRepository.GetBuddies(Int32 profileID) 的第 518 行: \Projects\Git\MyApp\MyApp.DAL\MyApp.DAL.MyAppPrimary.Repositories\MemberRepositories\MemberRepository.cs:line 271 2012-06-20 11:43:01.2392|致命|序列不包含元素| 在 System.Linq.Enumerable.First[TSource](IEnumerable`1 源) 在 C:\Projects\Git\MyApp\MyApp.DAL\MyApp.DAL.MyAppPrimary 中的 MyApp.DAL.Repositories.MemberRepository.GetNickname(Int32 profileID) .Repositories\MemberRepositories\MemberRepository.cs:第 337 行
最初我将退货放在里面using {...}
并将它们移到using
街区外,但仍然遇到同样的问题。
这是一个高流量的应用程序,所以在测试这个问题直到我们上线后才真正出现。
对于使用 Dapper 进行 DataReader 管理,这里还有其他事情要做吗?
- - - 更新 - - -
我应该早点发布这个,但现在才添加这个。
Dapper.Net 的第 581 行包含ExecuteReader()
代码:
...在嵌套using
代码中看到它?我想知道是否由于yield return (T)next;
while 内部的代码,嵌套的内部using
,是否会导致问题。
问题是,在流量适中的情况下,Dapper 似乎运行良好。然而,在一个每秒大约有 1000 个请求的系统中,它似乎会出错。
我想这对于 Dapper 开发者来说更像是一个仅供参考,并且想知道他们是否可以解决这个问题。
(我意识到我在代码中错过了命名 DapperORM - 它不是 ORM)