问题标签 [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.
c# - 如何使用 SqlClient 在 ADO.NET/C# 4.0 中解锁 SQL Server 2008 表?
我在后面创建了一个方法:
- 锁定了一张桌子
- 从中读取值
- 写回更新的值
- 解锁表
该代码适用于 Oracle。现在我无法让它在 SQL Server 2008 上工作。方法如下,执行我的解锁命令会产生一个SqlException
带有文本的结果:
“NOLOC”不是公认的表提示选项。如果它打算作为表值函数或 CHANGETABLE 函数的参数,请确保您的数据库兼容模式设置为 90。
代码:
那么这里出了什么问题呢?这个错误来自哪里?服务器还是客户端?我从 C 代码中复制了该语句,它应该在那里工作。不幸的是,我无法调试并检查它是否适合我。
编辑:只是尝试锁定和解锁(不读取或更新)会导致相同的异常。
谢谢和BR-马蒂
c# - 处理 SQL Server 2012 表中的空间数据类型
一些背景:
我在两个不同的 VM 上运行两个不同的 SQL Server 安装。我正在尝试从我的代码(为 SQL Server 2008 R2 编写)连接到它们。我当前的 .NET 框架版本是 4.0。我的 Microsoft SQL Server 2008 R2 安装正在运行为其设计的 AdventureWorks,而我的 SQL Server 2012 Express 安装正在运行更新的 AdventureWorks2012 数据库。我正在查询 Person.Address。
目前我遇到了一个异常,说“DataType 不能为空”。我通过查看返回的架构推断出问题来自 SQL Server 2012 返回
Microsoft.SqlServer.Types.SqlGeography
数据类型。似乎 Type.GetType 无法将其转换为可用的东西并引发异常。我松了一口气,我什么都没做,但我也很困惑,因为这段代码应该可以通用。请记住,此代码在 SQL Server 2008 R2 上完美运行(因为它缺少空间数据类型)。
我可以想出 100 种不好的方法来处理这个问题。但是,我想向你们寻求建议。将 .NET 升级到 4.5 会解决这个问题吗?我是否必须更改我的代码以适应新的数据类型?如果我的应用程序不处理空间数据类型,我应该担心它们吗?我该如何处理,因为显然 SqlClient 和 Type.GetType 做得不好。
谢谢!
c# - 普通 .NET 2 中缺少 SqlParameter 的 .TypeName 的解决方法
在普通的 .NET2 框架(无服务包)中没有属性
我的应用程序是在安装了 .NET2 SP1 的机器上构建的。它在数百台其他机器上执行,其中一些没有 .NET2 SP1,可能他们不会安装它们,所以他们得到这个异常:
从 c# 代码中,我执行使用 DataTable 对象作为输入的 SQL 脚本(没有存储过程调用,只是 sql 脚本),这意味着您必须从 c# 代码中定义表值参数的名称(执行存储过程时,此名称为在过程的声明中定义,您不必再次定义它)。显然,未安装 .NET2 SP1 时我无法执行此操作。
我的问题是:
有没有办法使用普通的 .NET2 框架(未安装 SP1)从 C# 代码中定义表值参数的名称?如何在没有 .NET2 的 SP1 的情况下执行使用来自 c# 代码的表值输入的简单 sql 脚本?
c# - 端口是否自动从 SQL Server 收集?
我注意到,如果在构建连接字符串时不提供端口,我仍然可以通过类似于 [SERVER][INSTANCE_NAME] 的命名实例连接到 SQL Server。
sqlclient 会自动为我收集端口号吗?即使实例是默认实例,我是否必须关心端口号?
如果这个问题看起来很新手,我很抱歉。谷歌只是没有为我提供任何东西。
谢谢!
sql-server - 转换后的 TIMESTAMP 的 SqlDataReader.GetString() 中的垃圾字符
我有一个 SELECT ,除其他外,
其中时间戳定义为
一些时间戳有错误的数据,这意味着它们不是像0x30332F31372F3131这样转换为"03/17/11"的东西,它们只有底部的四个字节,如0x0000000002F09ADD。
当我在 MSSMS 查询窗口中执行 SELECT 时,那些坏的会变成空白,这很好,但是当我使用 SqlDataReader 在我的程序中检索它们时,错误时间戳的字符串会出现垃圾字符,如" ðšÝ"
.
关于我能做些什么的任何想法?
c# - SQL Server长时间运行的查询通过.Net随机超时
我们有一个程序连接到我们的数据库并运行一些存储过程来获取一些数据。
数据库是 SQL Server 2008,程序在本地运行。连接是通过 TCP/IP,但启用了共享内存。并且连接字符串的超时设置为 45 秒。
当我们通过 SQL Server Management Studio 运行它们时,运行需要 0-5 秒。当我们通过代码运行它时,它会随机超时。
为了进行一些测试,我们将超时时间从 45 秒增加到几分钟。并且为了放弃任何阻塞问题,我们检查了存储过程仅“选择”数据(没有插入或更新语句)。我们已经为 select 语句尝试了几种表修饰符,例如:nolock
, readpast
, ...
我也检查了一下sp_who2
,dbcc opentran()
没有任何东西被阻止......而且.Net的SPID是running command ...
. 有关 .Net 等待数据库答案的更多详细信息,通过 SQL Server Management Studio,我可以毫无问题地运行相同的语句(存储过程或选择)。
对正在发生的事情有什么建议吗?
oracle - Oracle 数据库客户端
你能推荐我任何免费的oracle sql客户端吗?它不必附带 GUI,但它必须能够连接到远程数据库,而无需任何 oracle 驱动程序。我知道有 SQL Plus 或 Sql Developer,但没有注册是无法下载的。我想要一些真正免费的东西,我不会被迫做任何事情......
平台:Win/Debian
谢谢
c# - 为什么SqlClient 在传递SqlXml 时会使用不必要的XML 转换?
我有一个关于将 xml 数据类型传递给 C# 代码查询的问题。
首先,这是 SQL Server 上的一个表:
其次,我有一个用 C# 编写的应用程序。XmlTable
我从应用程序中插入行。
这是代码:
一切正常,插入行。但是,如果我运行 SQL Profiler 并检查插入命令,我会看到以下内容:
我们可以看到,尽管将SqlXml
类型传递给查询SqlClient
执行了从字符串到 XML 的不必要的转换。XML 解析器确实浪费了工作。
问题是:为什么SqlClient
要这样做?以及如何在没有额外转换的情况下做到这一点?
vb.net - 如何使 DataTable 只读?
我正在编写一个返回 DataTable 对象的函数。我正在使用DataTable.Load( DataReader)
来填充 DataTable。但是,据我了解,虽然底层 DataReader 是 ReadOnly,Forward-only;一旦它被加载到数据表中;其他程序员仍然可以通过DataTable.Rows(x).Column(y).ReadOnly = False
然后设置值来更新数据。
是否可以确保我的函数返回的 DataTable 是只读的?在较早的 ADODB 时代,我使用 ADODB.LockTypeEnum 将返回的记录集标记为只读。
只读,我的意思是我的函数的调用者(获取返回的 DataTable)不能对行数据进行更改和/或根本更新它(即只读)。
multithreading - 执行一系列 SQL 查询,并且需要能够从主 UI 线程中取消它们。最好的方法是什么?
目前,我有几个查询需要按顺序运行(一些创建临时表,我在以后的查询中从中提取)。
查询在一个BackgroundWorker
线程中运行,目前如果有CancellationPending
,我会在查询调用之间中断该方法。
但是这种方法是有问题的,因为有时单个查询可以运行很长时间或永远不会返回,所以我需要能够在轮询时运行每个查询BackgroundWorker.CancellationPending
。
在这种情况下使用的最佳异步模式是什么?我需要DataTable
为每个查询填写一个,但如果需要太长时间,仍然可以取消。