拉下表格后,有什么方法可以将新记录推送到 SqlDataReader 吗?我有这段需要修改的垃圾代码,这似乎是完成我需要的最简单的方法。我知道不应该这样做,如果你必须这样做,那么你的逻辑有严重错误,但有没有办法?
4 回答
SqlDataReaders 是向前只读的,所以我怀疑你可以添加一条记录(不管你是否已经拉下整个表)。事实上,任何继承 DbDataReader 的东西都是向前只读的。
我猜你需要对记录进行一些操作。也许您可以做的是使用 SqlDataReader 填充 DataTable 并将新记录放入 DataTable。但随后您需要更改代码以处理 DataTable。
从那时起,最简单的方法是手动创建一个带有插入命令字符串的命令(如果没有清理/清理数据,则参数化,无论如何最好这样做,但可能会使代码变得更庞大)。考虑到您已经设置了所有其他内容,因此代码应该非常小。
当您说“将新记录推送到”时……您的意思是要在结果中添加记录吗?或者你的意思是你想做一个插入?
INSERT 不能用阅读器完成;但是,您可以与读者一起做事。当然,更新原始查询以便 UNION 数据会更简单。
特别是:您不能创建自己的 SqlDataReader,但可以创建自己的定制 IDataReader 实现;这可以包装 SqlDataReader,简单地代理来自内部 SqlDataReader 的数据,直到 SqlDataReader.Read() 方法返回 false - 然后您可以切换为返回您自己的数据,返回 true 直到您用完数据。实现起来并不简单(主要是你需要实现很多方法来编写自己的IDataReader),但肯定不是不可能的。
你需要稍微扩展你的问题,
例如,如果您需要遍历一百万条记录并在遍历数据时更新同一张表上的字段。
您可以创建第二个 SqlConnection 到您的数据库并在表上执行更新语句(容易出现锁定问题),或者更好地将所有更改插入临时表并在完成阅读器后将更改合并回原始表.
我很想问一个小问题,这条逻辑可以用一条 SQL UPDATE 语句代替吗?