问题标签 [idatareader]
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# - IDataReader 与数据表;利弊
我正在做一个大规模的插入/更新操作。
所以我正在使用SqlBulkCopy
.
但是我偶然发现了这两个版本的WriteToServer
方法。
问题:一个比另一个有什么优点和缺点?哪个更快?
datatable - C#、AutoMapper、HOWTO:将列表映射到 DataTable
由于使用企业库数据阻塞来执行具有表值参数 (TVP) 的存储过程。
我希望能够在存储过程执行之前映射一个列表 => DataTable。
问题是我需要使用 AutoMapper 而不是手动执行此转换。
我想做这样的事情:
c# - 为 WebApi 阅读 IDataReader 的最佳方式
我有一个基于 Sql 查询返回动态结果的 WebApi 操作。目前使用以下函数来转换 IDataReader 工作正常,但它为每一行创建一个 Dictionary 对象。我想知道是否有更好的方法来做到这一点。
c# - 处理 IDataReader 给出运行时错误?
我正在尝试从Sybase
数据库中获取数据。但是当我尝试连接dispose
时close
,它会抛出异常SQL Runtime Error ...???
。没有内部异常,没有其他细节。这是我正在尝试的代码
这段代码抛出了上面提到的异常,堆栈跟踪是这样的,
如果我删除它,using
那么它运行良好。即使我尝试连接到Close()
连接,也会引发相同的异常。这只发生在 sybase 上,而不是任何其他数据库。
任何帮助都会很棒。如果有任何令人困惑或无法理解的地方,请随时发表评论。
c# - 将 IDataReader 映射到 C# 对象的最有效方法,也适合深度复制?
我们有一个场景,我们使用 Enterprise Library Data 包来满足我们的数据访问需求。我们已经实现了一个通用数据阅读器来将我们的数据融合到业务对象中。然而,我们正在寻找一种更有效的方法来做到这一点,这也将满足对象内子集合的深层复制,而无需使用反射,因为我们正在处理大量数据。通用数据阅读器也不能很好地处理大量数据。我知道如果我们使用 EF,它可以解决这个问题,但我们还没有到可以替换整个数据访问层的阶段。是否有替代方案或行业标准来实现这一目标?
c# - 使用继承的自定义 IDataReader 从 IDbCommand 读取
我已经继承了一个自定义类IDataReader
,并成功实现了一个自定义 ServerWriter sqlBulkCopy
,该自定义类使用 C# 对象而不是DataTable
.
正如我所怀疑的那样,这被证明是一种更有效的方法。
现在我正在尝试Read
,但我遇到了一些问题
这是IDataReader
:
该对象完全按照其对应的 SqlTable 进行映射。
在我的自定义 IDataReader 上将一个设置SqlCommand
为 ExecuteReader() 不起作用,所以我尝试了
IDbCommand
它,然后它确实编译了,但在尝试读取时仍然出现错误:
无法将“System.Data.SqlClient.SqlDataReader”类型的对象转换为“GetSDTOIDataReaderM”类型
写入服务器确实有效,我该如何正确实现它Read
?
更新
关于我的模块的更多信息
c# - 当 IDataReader 源具有 VARCHAR(256) 标识列时,无法调用 DataTable.Load()
我在尝试使用 IDataReader 将数据加载到 DataTable 时遇到了一些麻烦。为了简单起见,我只在命令上调用 ExecuteReader(),创建一个 DataTable,在其上调用 Load(),然后将实现 IDataReader 的对象提供给它:
这在绝大多数情况下都有效。但是,在(极少数)情况下,我得到以下异常(列名显然是可变的 - 在这种情况下,它是ID
):
我调查了我试图加载的源表,我怀疑问题源于它有一个 VARCHAR(256) ID 列,这是一个必需的、唯一的、键(当 PK 是一个普通的旧整数)。这种情况在源数据中确实很少见,虽然绝对不理想,但我无法修改源数据的架构。
我更详细地查看了 SchemaTable,我不知所措:
- 列名 - ID
- 列大小 - 256
- ProviderType - NVarChar
- 数据类型 - {Name = "String" FullName = "System.String"}
- IsIdentity - 真
- IsKey - 真
- IsAutoIncrement - 真
- IsUnique - 真
这对我来说没有意义。源表使用唯一代码作为 ID,虽然它不是我设计的方式,但它......很好。但我不明白 String/Varchar 如何成为身份、自动增量等。
不幸的是,我受制于这些源数据,不能乱用它,所以我希望这里的人能更深入地了解到底发生了什么。谁能想到一种方法让我在不应用 IDataReader 源数据的所有约束的情况下加载()我的 DataTable?有没有完全替代的方法可以避免这个问题?
感谢阅读,提前感谢您的帮助。这是我的第一个问题,所以要温柔。如果有更多信息对您有帮助,请告诉我!
编辑:有些人要求提供加载 DataTable 的完整代码。附于此。应该添加 CacheCommand/等。来自这个“InterSystems.Data.CacheClient”组件。有点希望这个问题可以更通用地解决。在这种情况下,查询字符串只是一个 'SELECT TOP 10 *' 测试。
编辑2:如果不清楚,我正在尝试将缓存数据库中的整个(小)表提取到数据表中。我通常通过调用 dataTable.Load(cacheDataReader) 来做到这一点,它在 99% 的情况下都可以正常工作,但是当 Cache DB 中的源表具有 VARCHAR 类型的标识列时会中断。
对我的 DataTable 对象(为空)调用 Load() 会导致它根据导入的 IDataReader(在本例中为 CacheDataReader)的结果集推断架构。问题是 CacheDataReader 中的架构指定了上面列表中的数据^,并且 DataTable 似乎不允许 MaxLength 属性,即使类型是 VARCHAR/String。
c# - 如何模拟 IDataReader 以测试将 SqlDataReader 转换为 System.DataView 的方法
我是 Moq 的新手,我正在努力编写单元测试来测试转换SqlDataAdapter
为System.DataView
. 这是我的方法:
我正在尝试创建以创建类似的东西:
我想传递一些数据并验证它是否已转换。
谢谢。
c# - 使用 SqlBulkCopy 时提供流作为二进制列的数据源
如果需要以流式方式从SqlServer 读取数据,则可以使用一些功能。例如使用SqlDataReader
with CommandBehavior.SequentialAccess
,特别是当需要访问二进制列数据时,有以下GetStream(int)
方法:
但是,当需要使用向SqlServer提供数据时SqlBulkCopy
,特别是如果需要将流作为二进制列的数据源提供时,反方向的流数据呢?
我试过以下
其中TestDataReader
实现IDataReader
如下:
它按预期工作。
然而变化
至
System.InvalidOperationException
导致消息异常
来自数据源的 MemoryStream 类型的给定值无法转换为指定目标列的 varbinary 类型。
有没有办法提供Stream
from IDataReader
(或可能DbDataReader
) toSqlBulkCopy
作为二进制列的数据源,而无需先将其所有数据复制到内存(字节数组)中?
c# - Automapper IDataReader 到列表- 缺少类型映射配置或不支持的映射
正如标题所示,我正在尝试将 DataReader 对象映射到对象列表,这是我正在使用的代码,我已经尝试使用 AutoMapper 4.2.1 和 3.3.1
初始化自动映射器后,我使用
这不会返回任何错误,然后我调用映射
但是,这会返回错误
{“缺少类型映射配置或不支持的映射。映射类型:IDataReader -> IList
1 System.Data.IDataReader -> System.Collections.Generic.IList
1[[MemberChangesDto, Models, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 目标路径:IList`1 源值:System。数据.DataTableReader"}
我试图映射到的对象看起来像这样。
谁能指出我正确的方向,我已经从一个对象到另一个对象使用 AutoMapper 没有问题,但是我认为 IDataReader 导致了这里的问题。
提前致谢。