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的重用 的相关文章

  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • SecurityAction.RequestMinimum 在 .Net 4.0 中已过时

    最近 我们的 Net 客户端库正在升级以针对 Net 4 0 进行编译 将目标框架更改为4 0后 应用程序出现一些编译错误 In AssemblyInfo cs assembly SecurityPermission SecurityAct
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • Visual Studio '17 未在参考管理器中显示程序集

    我遇到的问题是 我似乎无法弄清楚如何添加对某些解决方案的引用 在我从 Visual Studio 17 开始的大多数解决方案中 我在解决方案资源管理器中看到 引用 但例如对于 asp net core web api 我得到 依赖项 每当解
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 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