问题标签 [sqlcommand]

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.

0 投票
4 回答
11834 浏览

.net - 为什么在使用 SqlCommand 时某些 sql 查询要慢得多?

System.Data.SqlClient.SqlCommand我有一个存储过程,它从 Sql Server Management Studio 执行(2 秒)比运行时(2 分钟后超时)要快得多。

这可能是什么原因?


详细信息:在 Sql Server Management Studio 中,这将在 2 秒内运行(在生产数据库上):

在 .NET/C# 中,2 分钟后以下超时(在生产数据库上):

我也尝试了selectCommand = "sp_Stat",CommandType = StoredProcedure和 an SqlParameter,但结果相同。

没有EXEC它也是一样的结果。

在一个几乎没有数据的开发数据库上,这两种情况都在不到 1 秒的时间内完成。所以这与数据库中有很多数据有关,但它似乎只发生在.NET中......


Marc Gravell 所写的关于不同SET价值观的内容在所呈现的案例中有所不同。

SQL Server Profiler 显示 Sql Server Management Studio 运行以下SET.NET Sql Client Data Provider 没有:

当我包含这些内容时,相同的查询在 SSMS 和 .NET 中花费了相同的时间。负责人SET是...

我学到了什么?也许使用分析器而不是猜测......

(起初的解决方案似乎与参数嗅探有关。但我混淆了一些东西......)

0 投票
6 回答
70891 浏览

.net - SqlCommand.CommandTimeout 和 SqlConnection.ConnectionTimeout 有什么区别?

SqlCommand.CommandTimeout.NET和SqlConnection.ConnectionTimeout.NET之间有什么区别吗?

0 投票
5 回答
1033 浏览

c# - 将代码重构为 using 语句

我有一个带有很多方法的 dal 层,它们都调用存储过程,一些返回列表(所以使用SqlDataReader),其他的只有一个特定的值。

我有一个辅助方法可以创建SqlCommand

现在我的平均(过度简化)方法体看起来像:

有没有办法重构它,这样我就不会失去我的辅助功能(它会做很多其他重复的工作),而且还能使用using

0 投票
4 回答
8024 浏览

.net - 如何使用相同的 SqlConnection 对象在多个 SqlCommands 中声明和使用 T-SQL 变量来执行多个插入?

我想加载一个可能很长的用户名列表(从一个到数千个用户名)的记录列表。忽略名称是如何选择的,并假设它们无法从数据库中的任何现有数据中确定。这适用于 SQL Server 2005。

我特别想避免在 where 子句中使用带有数千个表达式的单个 select 语句,这会导致 SqlCommand 对象的命令文本过长(例如...where n='bob000001' or n='bob000002' or ... or n='bob003000')。听起来合理吗?

我决定通过使用用户名填充一个简单的表变量来执行选择,然后在表变量和带有用户数据的表之间执行选择/连接。

所以,我需要做的第一件事是填充表变量。我这里有一些问题:

  • SQL Server 2008 之前的 T-SQL 语法对于在单个语句中将多行插入表中是冗长的,需要类似multiple selects 和 union alls 之类的东西。
  • 我没有使用 SS2005 的冗长语法,甚至 SQL Server 2008 中可用的简洁语法,而是完全避免冗长的命令文本,而只是在单个连接上使用多个命令。
  • 在一个 SqlCommand 中声明表变量,当我尝试在后续 SqlCommand 中使用它时会产生“必须声明标量变量”错误。
  • 以任何方式涉及存储过程仍可能涉及传递巨大的字符串,或者可能会阻止变量在存储过程范围之外持续存在。假设创建存储过程不是一种选择。

第三点确实是我现在要解决的问题。我已经看到人们(声称)在单个 SqlCommand 中成功声明和使用变量而没有错误的示例。使用多个 SqlCommand 实例时如何实现这一点?我读到变量将针对多个命令的单个连接持续存在。可能以某种方式涉及交易帮助?

最后,请记住,我不想使用临时表;这样做会提供一个简单的解决方案,但它也避免了我提出的关于变量和多个 SqlCommand 的问题;但是,如果您真的认为这是最好的选择,请随意说出来。

这是一个显示正在发生的事情的代码片段:

注意:我知道涉及参数的 SqlCommand 在内部调用存储过程,这通常会阻止跨多个 SqlCommands 持久化变量,但声明表变量的第一个查询不涉及参数(即不引用 command.Parameters。 AddWithValue 已生成),因此它应该在以后可能调用存储过程的命令的范围内。

编辑:要使用临时表,只需将@s 更改为#s 并将declare @s table" 更改为create table #s,这很好。人们可能还想在最后删除临时表,但这不是必需的。

0 投票
1 回答
5521 浏览

c# - SqlCommand.ExecuteScalar 返回 null 但原始 SQL 不返回

我有以下代码使用 SqlClient.ExecuteScalar 方法从表中返回 ID。

最初它可以工作,但现在 contribId 为空。从 Profiler 中提取后,我在 Management Studio 中测试了 SQL,它按预期返回了 ID。

接下来我添加了一个额外的命令来从不同的表(产品)中检索一个 ID。
productId 不为空,而 contribId 继续为空。

我确信这是显而易见的事情,我会因为没有注意到它而踢自己,但现在我很难过。

0 投票
2 回答
558 浏览

sql-server - 在 SQL Server 2008 中处理对 BeginExecuteNonQuery 的多次调用

我有一个应用程序正在接收要存储在数据库中的大量数据。我当前的策略是在每条记录准备好时触发异步调用 (BeginExecuteNonQuery)。我正在使用异步调用来确保应用程序的其余部分顺利运行。

我遇到的问题是,随着数据量的增加,最终我会尝试在连接仍在使用时触发命令。我可以看到两种可能的选择:

  1. 自己缓冲待处理的数据,直到现有命令完成。
  2. 根据需要打开多个连接。

我不确定这些选项中哪一个是最好的,或者实际上是否有更好的方法。选项 1 可能会导致我的缓冲区越来越大,而选项 2 可能是非常糟糕的形式 - 我只是不知道。

任何帮助,将不胜感激。

0 投票
6 回答
1021 浏览

c# - SqlCommand C# Issue

The below piece of code that throws the following exception..

Error Message:

Object reference not set to an instance of an object. Stack Trace:
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()

I am lost as to the reason why..

0 投票
2 回答
4299 浏览

sql-server - 在不指定事务的情况下执行 SQLCommand

我们有一些数据列表通过 SqlCommandSELECT在 SQL Server 数据库上执行查询在我们的应用程序中获取。我们没有在 SqlCommand 上显式设置事务,而只是将 SqlConnection 传递给它并运行它。是否在没有指定事务时 SQL Server 将启动并使用默认 IsolationLevel 的默认事务ReadCommitted

0 投票
2 回答
2275 浏览

c# - SqlDbType.DateTime 不存储秒数吗?

我正在使用SqlCommand cmd.ParametersofSqlDbType.DateTime在数据库中创建记录。

秒数未存储在数据库中。数据库中的字段是日期时间类型。

我需要做一些特别的事情来节省时间,还是不SqlDbType.DateTime这样做?

0 投票
4 回答
399 浏览

java - 如何避免在 Java 中意外关闭 SQL 连接?

目前我正在为事务管理做的是:

我想知道,是否可以避免在我的“updateTableX”方法中关闭连接。因为如果有人不小心关闭了连接,那么我的 updateTableY 将没有连接,它会抛出异常。