SqlConnection和SqlDataReader的重用

2023-12-23

如果我想在不同的表上运行多个 SELECT 查询,我可以对所有表使用相同的 SqlDataReader 和 SqlConnection 吗?以下是明智的吗? (我输入得很快,所以它缺少 try/catch):

MySqlCommand myCommand = new MySqlCommand("SELECT * FROM table1", myConnection);

myConnection.Open();
SqlDataReader myDataReader = myCommand.ExecuteReader();

while(myReader.Read())
{
    //Perform work.
}

myCommand.commandText = "SELECT * FROM table2";

myReader = myCommand.ExecuteReader();

while(myReader.Read())
{
    //Perform more work
}

myReader.Close();
myConnection.Close();

多谢。


您可以对每个连接使用相同的连接,只要您不尝试从不同线程在同一连接上同时执行多个查询即可。

至于数据读取器,您实际上并没有重复使用读取器,每次调用ExecuteReader返回新阅读器的新实例,您所重用的只是维护对阅读器的引用的变量。这里存在一个问题,您只是显式关闭最后一个读取器,并让第一个读取器稍后进行 GC。

您也可以重复使用该命令,但请记住,如果您提供参数等,您将需要清除它们以用于下一个查询,除非它们也适用于下一个查询。

你应该使用try/finally块以确保您清理资源,或者这里是对您的代码的快速更改以使用using语句来确保资源清理,即使存在阻止其余代码执行的异常。

using (var myConnection = GetTheConnection())
{
  myConnection.Open();

  var myCommand = new MySqlCommand("SELECT * FROM table1", myConnection))
  using (var myDataReader = myCommand.ExecuteReader())
  {
    while(myReader.Read())
    {
      //Perform work.
    }
  } // Reader will be Disposed/Closed here

  myCommand.commandText = "SELECT * FROM table2";
  using (var myReader = myCommand.ExecuteReader())
  {
    while(myReader.Read())
    {
      //Perform more work
    }
  } // Reader will be Disposed/Closed here
} // Connection will be Disposed/Closed here

Note: GetTheConnection只是一个占位符函数,适用于您用来获取连接实例的任何机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SqlConnection和SqlDataReader的重用 的相关文章

  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • Dotnet“新”命令不适用于 Framework 4.5?

    我正在尝试使用 dotnet 创建 4 5 框架类库项目new命令如下 dotnet new classlib lang C f net45 o TestProject 错误 无效参数 f 网络45 net45 不是 f 框架 的有效值 如
  • 在不使用 ncurses 的情况下用 C/C++ 编写“真正的”交互式终端程序,例如 vim、htop...

    不 我不想使用ncurses 因为我想了解如何 终端可以工作 并且我自己编程也很有趣 没有 必须是可移植的 它必须只能在基于 linux xterm 的终端仿真器上工作 我想做的是编写一个交互式终端应用程序 例如 htop 和 vim 我的
  • StreamReader,C#,peek

    我有一个 StreamReader 它偶尔会检查它是否有更多内容可以从简单的文本文件中读取 它使用 peek 属性 问题是 当我使用 peek 时 位置发生了变化 尽管不应该发生 FileStream m fsReader new File
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一
  • C++:初始化静态字符串成员

    我在 C 中初始化静态字符串成员时遇到一些问题 我有几个类 每个类都包含几个表示 id 的静态字符串成员 当我通过调用静态函数初始化变量时 一切都很好 但是 当我想为一个变量分配另一个变量的值时 它仍然保留空字符串 这段代码有什么问题 st
  • 命名空间“Microsoft”中不存在类型或命名空间名称“Practices”

    我正在使用 Microsoft Visual Studio 2005 for c 我的代码中有以下命名空间 using Microsoft Practices EnterpriseLibrary using Microsoft Practi
  • 本地主机上的 .net HTTP_X_FORWARDED_FOR NULL

    抱歉 如果其他地方已经回答了这个问题 我找不到它 如果没有 我会尝试查找访问过该站点的机器的原始 IP 根据我的基本理解 变量HTTP X FORWARDED FOR无论代理和其他过滤器如何 都会显示用户的 IP 如果这是真的 我正在尝试对
  • ASP.NET MVC 路由 - 向路由添加 .html 扩展名

    我对 MVC 和路由非常陌生 我被要求修改一个应用程序以使用不同的 url 由于我没有经验 这项任务对我来说有点困难 好吧 让我们谈谈一些代码 routes MapRoute CategoryBySeName Route name prod
  • printf() 使用字符串表“解码器环”调试库

    我写这封信是想看看你们中是否有人见过或听说过我即将描述的想法的实现 我有兴趣为嵌入式目标开发 printf 风格的调试库 目标非常遥远 并且我和目标之间的通信带宽预算非常紧张 因此我希望能够以非常有效的格式获取调试消息 通常 调试语句如下所
  • 数组与映射的性能

    我必须循环一个大数组中的元素子集 其中每个元素都指向另一个元素 问题来自于检测大图中的连接组件 我的算法如下 1 考虑第一个元素 2 将下一个元素视为前一个元素所指向的元素 3 循环直到没有发现新元素 4 考虑1 3中尚未考虑的下一个元素
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • char* argv[] 在 c/c++ 中如何工作? [复制]

    这个问题在这里已经有答案了 我知道它用于使用命令行中的参数 但我没有得到声明 字符 argv 它是否意味着指向 char 数组的指针 如果是的话为什么没有大小 如果不是动态数组 就不需要有大小吗 我做了一些研究 发现有人说它会衰减为 cha
  • 从 exit() 和 fork() 返回的结果奇怪地发生了位移

    我有一个 C 代码 有时会自行分叉 每个分叉都会执行一些操作 然后返回一个错误代码 目前 每个子进程返回其 ID 0 n void other int numero exit numero int main for int i 0 i lt
  • 参数数量在编译时确定的 Lambda 函数

    我想声明一个带有 N 个参数的 lambda 函数 其中 N 是模板参数 就像是 template
  • 为什么我不能对普通变量进行多态?

    我是一名Java程序员 最近开始学习C 我对某事感到困惑 据我了解 在 C 中 要实现多态行为 您必须使用指针或引用 例如 考虑一个类Shape与实施的方法getArea 它有几个子类 每个子类都以不同的方式重写 getArea 然后考虑以
  • 修改代码以从 Windows 中的 PE 可执行文件检索双重签名信息?

    我已经挣扎了一段时间想要修改这段代码示例 https support microsoft com en us help 323809 how to get information from authenticode signed execu
  • 如何在 Winform DataGridView 中创建不同的单元格格式

    我有一个 DataGridView 我将其绑定到 DataTable DataTable 是一个全数字值 要求 DataGridView 中的每 n 行都包含文本 而不是数值 以便在视觉上为用户分隔部分 我很高兴在绑定后将此文本数据放入 D
  • 从 STL 列表中删除项目

    我想创建一个函数 如果符合特定条件 则将项目从一个 STL 列表移动到另一个列表 这段代码不是这样做的方法 迭代器很可能会被擦除 函数失效并导致问题 for std list
  • 如何在用户空间程序中使用内核 libcrc32c (或相同的函数)?

    我想在我自己的用户空间程序中进行一些 CRC 检查 我发现内核加密库已经在系统中 并且支持 SSE4 2 我尝试直接 include

随机推荐

  • 在 JSR-310 中查找下一个出现的星期几

    给定一个 JSR 310 对象 例如LocalDate 我如何找到下周三 或任何其他星期几 的日期 LocalDate today LocalDate now LocalDate nextWed 答案取决于您对 下周三 的定义 JSR 31
  • 如何使我自己的注释处理器增量?

    我创建了一个名为的注释处理器简易偏好设置 https github com amin amini EasyPrefs当我尝试在我的项目中使用它时 它显示以下警告 请求增量注释处理 但禁用支持 因为以下处理器不是增量的 net android
  • 将 Future[List[String]] 转换为 List[String]

    我有以下代码 Some db run unionPermissionQuery result map map name toList 我收到以下错误 error found scala concurrent Future List Stri
  • 如何修复 at=error code=H13 desc="连接关闭而无响应"?

    它正在 localhost 上运行 但在 heroku app 上关闭 2020 08 15T02 15 31 851406 00 00 app web 1 npm ERR errno 1 2020 08 15T02 15 31 85196
  • 如何在每个帖子中实现 og:tag ?

    在developer ctp 文件中的cakephp 项目中 我已经实现了og tags 我已经完成了四种类型 当我添加新帖子时 当时我想实现每个帖子都应该有这样的 og 标签 在 Cakephp 3 x 中你可以简单地使用这个 this
  • 当 Android 应用程序在后台时使用 Chromecast 设置音量

    我正在开发一款 Android 应用 可将内容流式传输到 Chromecast 设备 我没有找到有关当应用程序在后台时更改远程媒体播放器音量的方法的文档 看方法setUpRemoteControl in VideoCastManager类
  • 如何在 GDB 中“重新加载”源文件

    里面有命令吗gdb我可以用它来 重新 加载 刷新 源文件 据我所知 gdb仅适用于源目录 根据使用 GDB 调试 源代码 http davis lbl gov Manuals GDB gdb 8 html 并且没有特定的 刷新 命令 我的问
  • WooCommerce:根据选择的支付网关向卡添加费用

    我需要根据客户在 WooCommerce 购物车中选择的付款方式添加信用卡费用百分比 需要将其添加到购物车总额中 以便将包括费用在内的总金额发送到支付网关 例如 如果购物车总额为 100 英镑 如果客户选择 信用卡 付款 我想在交易中添加
  • 如何使用Fortify Scan 16.11通过project.Json扫描dotnet core

    我创建了一个默认的 Net Core 1 0 1 类库 并更改了 project json 中的 buildOptions 以包含 debugType Full 我使用 16 11 的集成 VS 2015 Fortify Scan 并收到以
  • GAE 上的 NextJS - 错误:EROFS:只读文件系统

    我正在尝试将带有自定义 server js 的 Next 应用程序部署到 GAE 中 我可以在本地甚至在 google GCP CLI 上毫无问题地运行该项目 现在的问题是应用程序成功部署到 GAE 之后gcloud app deploy
  • 如何禁用innodb索引

    我试图通过临时禁用 InnoDB 表的索引来加速 InnoDB 表中的批量插入 ALTER TABLE mytable DISABLE KEYS 但它给出了一个warning Level Code Message Note 1031 Tab
  • 读取文件无法正常工作

    我正在尝试通过流式传输方式通过我的服务器将文件下载给我 这是我的脚本 header Content Description File Transfer header Content Type application octet stream
  • IN 内多个值的 jdbc preparedStatements

    如何设置 sql 的值IN它可以保存变量数字 例如 WHERE 状态 IN 4 6 7 PreparedStatement ps con prepareStatement SELECT ea FROM employeeAssignment
  • 无法在移动/ipad 浏览器上浮动 twitter bootstrap 导航栏

    当您向下滚动页面时 使用 navbar 和 navbar fixed top 类会将导航栏浮动在页面顶部 这似乎不适用于移动 iPad 浏览器 为什么以及如何让它们也漂浮在移动浏览器上 在 ipad safari chrome Androi
  • 将 java Map 转换为自定义 key=value 字符串

    I have TreeMap
  • 有鼻子测试的 GUI 吗?

    过去几个月我一直在使用nosetests 来运行我的Python 单元测试 它确实可以完成工作 但对于直观地显示哪些测试正在运行或正在破坏的情况来说 它并不是很好 我使用了其他几个基于 GUI 的单元测试框架 它们提供单元测试状态的可视化快
  • Three.js 中的旋转方向或用手习惯

    我注意到当我绕 Z 轴旋转模型时 如下所示 model rotateZ rotatedAngle Math PI 180 它似乎绕轴逆时针旋转 这个观察准确吗 这有记录在某处吗 我找不到它 也许我使用了错误的搜索词 这是可配置的吗 最重要的
  • Python 中的矩阵向​​量运算

    我发过一个类似的帖子here https stackoverflow com questions 53384285 initialize the first index of a list in python 现在我试图概括整个数字矩阵所做
  • 将 Vue.js v-on 事件添加到 D3 SVG 元素

    是否可以将 VueJS v on 事件添加到 D3 中的 SVG 元素 我想对 SVG 的每个矩形元素使用 v on mouseover 功能 我试图通过添加来做到这一点v on mouseover active active 作为 D3
  • SqlConnection和SqlDataReader的重用

    如果我想在不同的表上运行多个 SELECT 查询 我可以对所有表使用相同的 SqlDataReader 和 SqlConnection 吗 以下是明智的吗 我输入得很快 所以它缺少 try catch MySqlCommand myComm