Questions tagged «ado.net»

6
将SqlClient默认设置为ARITHABORT ON
首先,第一件事:我将MS SQL Server 2008与兼容级别为80的数据库一起使用,并使用.Net的数据库进行连接System.Data.SqlClient.SqlConnection。 出于性能原因,我创建了索引视图。结果,需要使用对视图中引用的表进行更新ARITHABORT ON。但是,探查器显示SqlClient正在与进行连接ARITHABORT OFF,因此对这些表的更新失败。 是否有使SqlClient使用的中央配置设置ARITHABORT ON?我能找到的最好的方法是在每次打开连接时手动执行该操作,但是更新现有代码库来执行此操作将是一项相当大的任务,因此我渴望找到一种更好的方法。

3
什么是“混沌”隔离级别?何时使用?
ADO.NET文档显示了将SQL事务的事务级别设置为Chaos的可能性。听起来不愉快,但是如果该功能存在,那么大概可以合理使用。 BOL中的SET TRANSACTION ISOLATION LEVEL命令(啊!看,我可以使用google和BOL)似乎什么都没有命名为“ chaos”,并且ADO.NET确实有5种模式,除了“ chaos”之外,它们还与已记录的级别很好地匹配 这个混沌水平是做什么的?(为什么它的名称不友好?) 参考: ADO.NET枚举

3
为什么“ SELECT @@ IDENTITY”返回一个小数?
我正在使用Dapper从ASP.NET MVC 3(.NET 4.0)应用程序对SQL Server 2008 R2 Express实例执行以下查询。 INSERT INTO Customers ( Type, Name, Address, ContactName, ContactNumber, ContactEmail, Supplier) VALUES ( @Type, @Name, @Address, @ContactName, @ContactNumber, @ContactEmail, @Supplier) SELECT @@IDENTITY 的调用connection.Query<int>(sql, ...)引发了无效的强制转换异常。我已经调试了它,就在Dapper调用return GetValue的时候SqlDataReader。 返回类型GetValue为Object,在调试器中检查它的显示类型是装箱的十进制数。 如果将select更改为SELECT CAST(@@IDENTITY as int),则GetValue的返回是装箱的int,并且不会引发异常。 Id列绝对是int类型;为什么要SELECT @@IDENTITY返回小数? 一些其他信息: 该数据库是全新的。 客户表是我添加到其中的唯一对象。数据库中没有其他(用户)表,视图,触发器或存储过程。 数据库中有10行,Id为1,2,3,4,5,6,7,8,9,10(即,该列未超出int的限制)。 我的表定义是 CREATE TABLE [dbo].[Customers]( [Id] [int] …

2
无法破译innodb状态日志中的死锁
我们正在从Microsoft ADO.NET连接器访问MySQL。 有时,我们在innodb状态中看到以下死锁,并且无法确定问题的原因。看起来事务(2)正在等待并持有相同的锁? ------------------------ LATEST DETECTED DEADLOCK ------------------------ 110606 5:35:09 *** (1) TRANSACTION: TRANSACTION 0 45321452, ACTIVE 0 sec, OS thread id 3804 starting index read mysql tables in use 1, locked 1 LOCK WAIT 2 lock struct(s), heap size 368, 1 row lock(s) MySQL thread id 84, query id …


2
如果按顺序执行,这两个查询会导致死锁吗?
几乎可以肯定这是我提出另一个问题的原因,但是我认为有必要将两者分开,因为我有一个假设,该假设基于以下日志,我希望对其进行伪造或验证。 我的假设是,另一个死锁实际上是以下查询的结果,根据我的理解,隐藏原始查询的原因是innodb状态仅显示最近的事务(这对吗?)。 根据日志,我检查了我们的代码,发现依次执行了以下两个查询: db.Execute("UPDATE people SET iphone_device_id=NULL WHERE iphone_device_id=@0 AND people_id<>@1", DeviceID, m_User.people_id); // I have hard coded this query in this snippet to simplify things db.Execute("UPDATE people SET company_id = 444, name = 'Dad', password = '<pass>', temp_password = NULL, reset_password_hash = NULL, email = '<redacted>@gmail.com', phone = NULL, …

1
为SQL Server中的所有连接设置ARITHABORT ON的后果是什么?
因此,我确定SQL Server的行为不稳定是由于.Net SqlClient数据提供程序的默认设置为SET ARITHABORT OFF。话虽如此,我已经阅读了各种文章,讨论了实现此目标的最佳方法。对我来说,我只想采用一种简单的方法,因为SQL Server遭受了麻烦,而且我的查询调优还没有完全跨应用程序(显然,SET在sp中添加不能正常工作)。 在Erland Sommarskog 关于该主题的精彩文章中,他基本上建议通过更改要SET ARITHABORT ON为连接发布的应用程序来采用安全的方法。但是,在dba.stackexchange 问题的此答案中,Solomon Rutzky 提供了实例范围和数据库范围的方法。 在此设置整个实例范围时,我在这里缺少什么后果?正如我所看到的...由于SSMS ON默认情况下已设置了此设置,所以我认为在ON所有服务器范围内都设置此服务器范围没有什么害处。归根结底,我只需要此SQL Server才能执行最重要的任务。

2
如何获得像SSMS这样的单个行数?
我有一个客户端c#程序,正在通过执行存储过程ExectueNonQuery,包括PRINT使用InfoMessage事件捕获和错误输出。它工作正常,但我注意到有些奇怪。 当我从SSMS执行存储过程时,它将显示在“消息”选项卡中执行的每个单独的SQL语句的行数(就像它来自InfoMessages)。尽管我的程序确实捕获了所有其他相同的输出,但是我的程序从未看到这些消息。相反,它仅返回ExecuteNonQuery函数结果中受影响的行,该行是所有单个行计数之和(这是无用的)。 例如,此过程: use [tempdb] go SELECT * INTO MyCols FROM sys.columns go CREATE PROC foo As UPDATE MyCols SET name = name + N'' -- SSMS shows (662 row(s) affected) UPDATE MyCols SET name = name + N'' WHERE name like '%x%' -- SSMS shows (59 row(s) affected) PRINT …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.