如何在 C# 中保持单个 SQL Server 连接实例对多个请求打开?

2023-12-24

我有一个 Web API,其中包含 C# 中的数据库插入逻辑 (ado.net)。当多个用户(例如 100 个用户)调用 Web API 时,每次都会针对多个请求打开和关闭 SQL Server 连接。它会降低性能。

如何为多个请求保持单个 SQL Server 连接处于活动状态?我必须保持 SQL 连接仅打开一次并在一段时间后关闭,以便在此期间它应该考虑多个请求并在数据库中插入记录。

请建议。


ADO.NET的SqlConnection正在实现一个连接池。 这意味着当您关闭或处置一个实例时SqlConnection,底层连接只是返回到池中。当另一个实例SqlConnection打开,并且连接池中有可用连接,将使用该连接。
事实上,微软文档页面SQL Server 连接池 https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling明确指出:

Caution
我们强烈建议您在使用完连接后始终关闭连接,以便连接返回到池中。您可以使用 Connection 对象的 Close 或 Dispose 方法,或者通过在 C# 中的 using 语句或 Visual Basic 中的 using 语句内打开所有连接来执行此操作。未显式关闭的连接可能不会添加或返回到池中。有关详细信息,请参阅使用语句或如何:处置 Visual Basic 的系统资源。

这意味着使用的最佳实践方法SqlConnection这是:

using(var con = new SqlConnection(connectionString))
{
    // your sql stuff goes here...
}

BTW, SqlCommand, SqlDataReader and SqlDataAdapter还实施了IDisposable接口,因此它们也需要在上下文中使用using陈述:

using(var con = new SqlConnection(connectionString))
{
    using(var cmd = new SqlCommand(sql, con))
    {
        // prepare command here - parameters and stuff like that

        // either
        using(var reader = cmd.ExecuteReader())
        {

        }

        // or 
        using(var adapter = new SqlDataAdapter(cmd))
        {

        }

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

如何在 C# 中保持单个 SQL Server 连接实例对多个请求打开? 的相关文章

  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 如何在加载.NET WinForm应用程序user.config文件时捕获异常?

    有时 在使用默认配置系统的 NET 2 0 WinForm 桌面应用程序中 user config文件将被损坏并且无法再加载 当配置系统尝试加载它时 它会抛出一个System Xml XmlException 抛开 为什么文件首先被损坏 的
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 通知设置的数据库设计

    用户可以打开或关闭 他的通知设置 帐户 用于通知 例如 更改帐户资料信息 收到新消息等 通知可以通过电子邮件或手机 推送或短信 发送 用户可以只有 1 封电子邮件和多个手机设备 有什么方法可以改进以下数据库设计或者您会采取不同的方式吗 让我
  • 我可以从 SQL Server 读取元数据来了解最后更改的行/表吗?

    我们有一个数据库hundreds的桌子 有没有某种metaSQL Server 中的数据源 我可以以编程方式查询以获取名称最后更改表和行 或者我们是否需要实施这个我们自己每个表中的字段称为上次更改日期时间 etc 就查明表最后一次修改的时间
  • 从 Sharepoint 到 SQL Server 的实时同步

    我见过许多将 SQL Server 数据同步到 SharePoint 的解决方案 但没有见过将 SharePoint 列表同步到 SQL Server 的解决方案 有谁知道解决方案吗 商业化就好了 或者 我需要编写一个 Web 部件来创建多
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 使用 C# 读取 Soap 消息

  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 在 CSS 中使用相对大小而不是固定大小

    我想使用相对大小而不是固定大小 我想用它们 我的CSS是 body font 10px wrap font 1 2em wrap ul li padding left 2em 的价值是什么li的内边距以 px 为单位 我猜它是 2 0 10
  • Java Transformer 如何忽略名称空间

    我必须将 XML 转换为 XHTML 但 XML 定义了命名空间xmlns http www lotus com dxl 它从未在整个 XML 中使用过 因此解析器不会解析任何内容 有没有办法忽略命名空间 我正在使用 Oracle java
  • 使用 Web Api 验证 .NET MVC 应用程序

    我有一个基于 SPA VS 2013 模板的 Web Api 2 项目 我在该 Api 中配置了不记名令牌身份验证 我还有一个单独的 MVC 5 项目 我想使用该 Web Api 进行身份验证 那可能吗 如何 到目前为止我做了什么 在我的
  • Eclipse 中没有服务器;尝试安装 Tomcat

    我正在尝试在 Eclipse 中安装 Tomcat 但无法显示服务器选项卡 当我去窗口 gt 显示视图 gt 其他并输入 服务器 我没有得到任何结果 当我去文件 gt 新建 gt 其他并输入 服务器 我也什么也得不到 有谁知道我的服务器出了
  • 如何使用java api知道jenkins构建执行器是否空闲

    我想通过使用 java jenkins API 知道 jenkins 中的构建执行器是否空闲 空闲或任何作业正在主节点中运行 而我的要求是这样的 如果任何执行者有空 我必须触发詹金斯工作 否则我会等到他们可用 为此我必须使用 Jenkins
  • 使用nextjs和react-jss时className不匹配

    我将 nextjs 与 typescript 和 React jss 一起使用 我收到错误 Warning Prop className did not match Server mobileNavToggle 0 2 10 Client
  • 从客户端控制器指定 Mongo 查询参数 (MEAN.JS)

    我正在使用 MongoDB Angular Express 和 Node MEAN 堆栈 构建一个应用程序 我使用 MEAN JS 生成器来构建我的应用程序 我将使用文章模块作为参考 假设我的文章集合中有 7000 条记录 并且每条记录都有
  • 如何在 Android 中使用新的 Dialogflow SDK V2

    我对迁移到 Dialogflow V2 有点困惑 我有一个 Android 应用程序使用https github com dialogflow dialogflow android client https github com dialo
  • 交互式地处理占用大量内存的列表对象

    我最近发现了包裹的奇妙之处bigmemory ff and filehash处理非常大的矩阵 如何处理非常大 300MB 的列表 在我的工作中 我每天都在处理这些列表 我可以用创可贴解决方案save load 黑客无处不在 但我更喜欢big
  • 为什么在 Python 中 math.floor(x/y) != x // y 表示两个可整除的浮点数?

    我一直在阅读有关Python中的除法和整数除法以及Python2与Python3中的除法之间的差异 在大多数情况下 这一切都是有道理的 Python 2 仅当两个值都是整数时才使用整数除法 Python 3 始终执行真除法 Python 2
  • 动态 SVG 图像生成问题

    我正在尝试编写一个服务器端脚本 PHP 来根据用户输入生成 SVG 图像 我正在使用以下代码
  • 跨多个微服务的 2PC 分布式事务?

    I read some information about 2 Phase Commit XA distributed transactions and how JTA does support it Seems to be that th
  • 需要一个通过属性配置 log4j RollingFileAppender 的工作示例

    我使用 log4j 进行日志记录 并使用属性文件进行配置 目前 我的日志文件太大 3 5 GB 对于日志文件来说太大了 所以think我需要使用 RollingFileAppender 但当我这样做时 日志文件继续变得过大 我相信我只是配置
  • 合并接口时覆盖 TypeScript 中的“any”

    我正在使用 Express 并且我正在尝试明确定义res locals 在 types express包中 Express Response locals是any 所以我似乎无法覆盖它 类型 express index d ts decla
  • Python 中的构造函数 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要帮助编写 Python 构造函
  • 使用对象包装器来扩展 JavaScript DOM?

    我正在尝试向 JavaScript DOM 添加简单的函数 例如一个addClass函数 我首先使用以下代码实现了它 Element prototype addClass function className this className
  • 从目录中删除所有 git 文件?

    我有一个受版本控制的文件夹 我想复制它以发送 但不想包含所有 git 目录及其下面的文件 有没有办法删除所有 git 文件 而不是手动删除所有文件 如何全部删除 gitLinux 中文件夹下的目录 运行这个 find 命令 它将列出所有 g
  • $提供外部配置块

    我当然遗漏了有关注射器的一些基本点 但我无法理解为什么会这样 angular module app config function provide and this angular module app config function in
  • Pycharm环境与命令行不同

    我在使 Pycharm 环境与命令行上的环境匹配时遇到问题 我最近删除了 python 并通过 homebrew 重新安装了它 我的路径中的 python 指向 usr local bin python我添加了PATH usr local
  • 如何在 C# 中保持单个 SQL Server 连接实例对多个请求打开?

    我有一个 Web API 其中包含 C 中的数据库插入逻辑 ado net 当多个用户 例如 100 个用户 调用 Web API 时 每次都会针对多个请求打开和关闭 SQL Server 连接 它会降低性能 如何为多个请求保持单个 SQL