问题标签 [sqlclient]

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 投票
6 回答
7092 浏览

c# - 在没有 SQL Server 的情况下创建 C# 应用程序

我刚开始使用 SQL,现在我需要为我的 C# 应用程序创建一个数据库,该数据库将保存用户名和密码。把它想象成一个密码提醒。

无论如何,我认为我需要做的是:我需要创建一个 SQL 数据库,该应用程序仅用于保存数据。它不需要在计算机上安装 SQL Server。

我在互联网上搜索但没有结果,所有这些都需要使用 SQL Server,请您提供执行此操作的步骤或任何资源,非常感谢。

0 投票
5 回答
14671 浏览

c# - 是否可以传递一个 DB.null 参数并在数据库中设置一个等于该参数的值?

我正在从数据库(1 条记录)中提取数据并将每个值放入文本框或下拉列表中。其中一些值是 DB.null。如果是,我将它们中的每一个都转换为“”(空白)。但是,一旦用户修改了文本框/下拉列表,他们就可以“保存”新结果。我的问题是这样的:

如果用户留下空白,我希望能够保持该值为 DB.null。有没有办法做到这一点?

另外,如果文本框中有一个值并且用户决定删除它,我是否也可以将其转换为 DB.Null?这是我试图给你们一些想法的方法:

0 投票
2 回答
1701 浏览

vb.net - 多线程 SQL 客户端写入查询

我有一个 MS sql 数据库(不是服务器),我的程序从我的 2 TB 外部驱动器读取文件结构并将列表保存在数据库中。我每次写大约 8 万条记录,这需要很长时间。

我目前正在通过将它们分成 2 个后台 Worker 线程来编写记录,每个线程 40k。我的电脑是四核 Phenom II。

实现这一目标的最佳方法是什么,并且通过增加线程数量也会有任何好处,因为我的只是 7200rpm 硬盘而不是突袭。我的意思是硬盘可能是一个限制?

谢谢你。

编辑:写入所有记录的时间约为 15-18 分钟。我没有使用存储过程。我只使用自动生成的表适配器中的插入命令。我为每个线程循环插入语句 40k 次。不,不是基于索引文件进行更新,它们只是插入语句。

0 投票
2 回答
8239 浏览

c# - System.InvalidCastException:无法将参数值从 XElement 转换为字符串

注意:我无法在搜索中找到这个确切的问题。我在 Stack Overflow 上发现了一个有点类似的问题,这让我找到了解决方案。我正在发布问题和解决方案,以便下一个遇到问题的人可以更轻松地找到解决方案。如果仍然可能的话,我会提出 CommunityWiki 的问题——我不是在寻找代表。


我正在尝试使用 ADO.NET 调用接受以下Xml类型参数的 SQL Server 2005 存储过程:

我将 XML 作为 LINQ to XML XElement 对象传递

之后

除了以下情况外,这将失败ExecuteReader

System.InvalidCastException:无法将参数值从 XElement 转换为字符串。---> System.InvalidCastException:对象必须实现 IConvertible

XElement将 an 传递给存储过程的正确方法是什么?

0 投票
1 回答
159 浏览

c# - SQL 认证连接错误,PW 中有可疑字符

在 web.config 中:

我通过删除数据库用户并重新创建它来确保用户名在 INITIALDB 中具有 db_owner 角色。我通过 SSMS(使用上述 UID 和 PWD)连接到服务器并扩展数据库,确保用户名密码有效。

有任何想法吗?我束手无策,我无法轻易更改分配给我的密码......我认为这些字符中的任何一个都不需要转义,但显然存在问题。

更新:

该错误与密码字符无关。我收到“无法打开数据库......登录请求。登录失败......”但是 - 当我从连接字符串中删除“初始目录”或“数据库”部分时,连接工作正常。原来,数据库有一个与数据库名称不同的 .MDF 文件名(例如 my_db_name 和 db_name.mdf)。不知何故,指定数据库或初始目录属性的连接字符串因此无法连接。分离,将 MDF 文件名更改为一致,然后重新附加数据库实际上解决了问题。奇怪,对吧?

0 投票
1 回答
74 浏览

c# - SqlClient 释放资源很慢(但不是每次都这样)

我这个问题很久了,但是我们即将发布,必须修复它。

我有一个应用程序,在该应用程序中,我可以调用另一个应用程序(它可以是同一个应用程序,但具有不同的参数)。

我们做出的一个选择是禁用调用者,直到被调用者启动。

当我关闭被调用时,在某些情况下,释放资源的时间大约持续 1500 毫秒,但并非每次都如此。

我使用 DotTrace 来查看发生了什么,这里是堆栈:

堆栈慢

正如我们所见,Finalize 方法持续了 1500 毫秒,我不知道为什么!

对于某些程序,只需几毫秒。

所以,如果有人有想法,......

谢谢,圣诞快乐!

0 投票
3 回答
1748 浏览

python - SqlClient 连接超时

我正在编写一些 python 来与我可以访问的 MSSQL 服务器进行交互。我目前遇到的问题是我的一个交易语句没有超过默认设置的超时期限(30 秒)。

我试图将连接字符串中的命令超时更改为值为 0,这样这不会成为问题,但我被告知命令超时关键字不受支持。

这是我的连接字符串:

这是我在使用此连接字符串时收到的控制台消息:

我已经尝试使用空格、不带空格和带/不带大写字母的命令超时,具体取决于我在尝试解决此问题时当前正在阅读的任何支持线程。

当更改连接字符串中的命令超时似乎不起作用时,这里有没有人知道将超时值设置为超过 30 秒的方法?

0 投票
1 回答
1020 浏览

.net - 将小数和字符串作为 SqlParameter 传递的正确方法

我正在为某些项目的 SQL Server 创建可重用的数据访问层。我在寻找将 .NETdecimal作为参数传递给查询的正确方法时遇到问题。最明显的方式:

效果几乎很好。该值已正确存储在 DB 中,但 SqlClient 从实际值推断出确切的类型,因此当应用程序传递 12345.678 时,它会将 @P0 声明为NUMERIC(8,3). 当完全相同的查询与其他值一起使用时,将声明该值的精度和比例。由于我不知道的原因,从 SQL Server 中,这些查询不相等,并且每个查询都在sys.dm_exec_cached_plans. 存在完全相同的问题string- 对于每个长度都有不同的查询计划。

我们的一些应用程序每分钟写入相当多的记录,每个记录有 5-10 个decimal值,范围变化很​​大(一些传感器数据,一些货币值)。几乎每个INSERT人都有自己的查询计划,一天后缓存了超过 10 万个相同查询计划的版本,占用了几 GB 的 RAM。

我要处理的想法是将所有可能的类型合并为一些任意选择的类型。对于decimal,当精度低于 20 时,我将其设置为 20。当精度大于 20 时,我将其设置为比实际精度大的可被 4 整除的最小值(例如 24、28、32、36)。音阶(最小 2,然后是 2)和弦乐(最小 128,然后是 2 的幂)也是如此。这种方式似乎可以控制问题 - 我已经看到每个查询有大约 100 个计划变体,而不是 100k,并且 SQL Server 将内存用于缓冲池,而不是用于一些无用的计划。

这种方法有什么可能出错的吗?在使用 SqlClient 和加载的查询时,是否有更好的方法来控制查询计划缓存decimals

我不能做的事情清单:

  • 使用存储过程——因为这个 DAL 的目的是为许多 DBMS(目前是 SQL Server、MS Access、Firebird、Oracle)创建抽象层。
  • 强迫我的队友以某种方式传递每个变量的实际类型——因为那太残忍了。
  • 删除这个 DAL,使用普通的旧 DbProviderFactory 并创建像 1990 年那样的参数 - 因为这个 DAL 还处理 SQL 方言的查询创建、数据库结构创建等。
  • 丢弃这个 DAL 并使用像 NHibernate 这样的“正确”DAO - 因为它不是在这里发明的。
  • 将此问题提交给 dba.stackexchange.com - 因为这是 SqlClient 和我使用它的方式的问题,而不是 SQL Server 本身的问题。
0 投票
8 回答
8708 浏览

c# - System.Data.IDbCommand 和异步执行?

System.Data.SqlClient.SqlCommand 有方法

用于异步执行。

System.Data.IDbCommand 只有

仅用于同步操作。

有异步操作的接口吗?
另外,为什么没有 BeginExecuteScalar ?

0 投票
3 回答
6355 浏览

c# - '<' 附近的语法不正确。标签“xmlns”已被声明。标签名称在查询批处理或存储过程中必须是唯一的

我从 xml 格式的数据库中获取字符串,并尝试使用以下查询更新 xml:

但它给了我错误信息:

Incorrect syntax near '<'. The label 'xmlns' has already been declared. Label names must be unique within a query batch or stored procedure. An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name. An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name. An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name. An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name. An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name.

我觉得这可能与引号有关,但我不确定。我尝试了不同的选项,如单引号、混合等。

例如,如果我这样做:

这是否会将消息中的双引号永久更新为单引号。我不想这样做。