问题标签 [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.
.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
是...
我学到了什么?也许使用分析器而不是猜测......
(起初的解决方案似乎与参数嗅探有关。但我混淆了一些东西......)
.net - SqlCommand.CommandTimeout 和 SqlConnection.ConnectionTimeout 有什么区别?
SqlCommand.CommandTimeout
.NET和SqlConnection.ConnectionTimeout
.NET之间有什么区别吗?
c# - 将代码重构为 using 语句
我有一个带有很多方法的 dal 层,它们都调用存储过程,一些返回列表(所以使用SqlDataReader
),其他的只有一个特定的值。
我有一个辅助方法可以创建SqlCommand
:
现在我的平均(过度简化)方法体看起来像:
有没有办法重构它,这样我就不会失去我的辅助功能(它会做很多其他重复的工作),而且还能使用using
?
.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,这很好。人们可能还想在最后删除临时表,但这不是必需的。
c# - SqlCommand.ExecuteScalar 返回 null 但原始 SQL 不返回
我有以下代码使用 SqlClient.ExecuteScalar 方法从表中返回 ID。
最初它可以工作,但现在 contribId 为空。从 Profiler 中提取后,我在 Management Studio 中测试了 SQL,它按预期返回了 ID。
接下来我添加了一个额外的命令来从不同的表(产品)中检索一个 ID。
productId 不为空,而 contribId 继续为空。
我确信这是显而易见的事情,我会因为没有注意到它而踢自己,但现在我很难过。
sql-server - 在 SQL Server 2008 中处理对 BeginExecuteNonQuery 的多次调用
我有一个应用程序正在接收要存储在数据库中的大量数据。我当前的策略是在每条记录准备好时触发异步调用 (BeginExecuteNonQuery)。我正在使用异步调用来确保应用程序的其余部分顺利运行。
我遇到的问题是,随着数据量的增加,最终我会尝试在连接仍在使用时触发命令。我可以看到两种可能的选择:
- 自己缓冲待处理的数据,直到现有命令完成。
- 根据需要打开多个连接。
我不确定这些选项中哪一个是最好的,或者实际上是否有更好的方法。选项 1 可能会导致我的缓冲区越来越大,而选项 2 可能是非常糟糕的形式 - 我只是不知道。
任何帮助,将不胜感激。
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..
sql-server - 在不指定事务的情况下执行 SQLCommand
我们有一些数据列表通过 SqlCommandSELECT
在 SQL Server 数据库上执行查询在我们的应用程序中获取。我们没有在 SqlCommand 上显式设置事务,而只是将 SqlConnection 传递给它并运行它。是否在没有指定事务时 SQL Server 将启动并使用默认 IsolationLevel 的默认事务ReadCommitted
?
c# - SqlDbType.DateTime 不存储秒数吗?
我正在使用SqlCommand cmd.Parameters
ofSqlDbType.DateTime
在数据库中创建记录。
秒数未存储在数据库中。数据库中的字段是日期时间类型。
我需要做一些特别的事情来节省时间,还是不SqlDbType.DateTime
这样做?
java - 如何避免在 Java 中意外关闭 SQL 连接?
目前我正在为事务管理做的是:
我想知道,是否可以避免在我的“updateTableX”方法中关闭连接。因为如果有人不小心关闭了连接,那么我的 updateTableY 将没有连接,它会抛出异常。