小编Tre*_*ent的帖子

在C#中实现RAII

我有一个InfoPath表单,我需要有条件地禁用它的OnChange事件.由于在表单加载后无法绑定事件处理程序,因此我不得不依赖一个全局计数器来指示是否应该执行OnChange事件.在每个OnChange事件中,我在执行任何操作之前检查SuppressEventsCount == 0.为了在执行某个函数或其他函数期间抑制事件,我只需设置SuppressEventsCount ++,并且 - 当函数退出时再次.这样做的最大问题是它不是例外.所以我有一个好主意将SuppressEvents计数器包装在一个实现iDisposable的类中

using(SuppressEvents s = new SuppressEvents()){
   // OnChange events fired here are ignored
} // OnChange events enabled again
Run Code Online (Sandbox Code Playgroud)

这是有效的,但它仍然不如c ++解决方案那么理想,它根本不需要使用"using"指令.

有没有办法:

  1. 在对象超出范围时触发析构函数或某些函数,或者
  2. 防止SuppressEvents对象完全在"using"指令之外进行初始化

c# raii

8
推荐指数
2
解决办法
7024
查看次数

SQL Server 2008:从datetime2获取日期部分

我一直在使用这个非常方便的方法从datetime值中提取日期部分:

select dateadd(day, datediff(day, 0, @inDate), 0)
Run Code Online (Sandbox Code Playgroud)

这基本上将日期的时间部分清零.它很快,更重要的是它是确定性的 - 您可以在持久计算列,索引视图等中使用此表达式.

然而,我正在努力想出一些适用于该datetime2类型的东西.问题是SQL Server没有权限从整数到datetime2类型的转换.

是否有一种等效的,确定性的方法来剥离时间部分datetime2

sql-server datetime2 sql-server-2008

8
推荐指数
1
解决办法
1万
查看次数

MS Access无限期地保存对表行的锁定

我们使用MS Access作为我们其中一个系统的GUI,但是我们遇到了Access在底层表或行上持有锁的问题,这会阻止SQL服务器对此数据运行任何更新查询.这是有问题的,因为虽然我们的Access前端只需要对此数据的只读访问,但我们有适当的系统定期刷新数据.由于Access已经锁定数据,因此这些刷新操作失败(或无限延迟).

通过打开Access前端并使用sys.dm_tran_locks DMV显示数据锁定来说明此问题.我重现问题的步骤是:

  1. 打开Access前端.这显示了一个包含数千条记录的可滚动表单
  2. 使用SQL Server DMV显示数据锁.这显示了5个"对象"类型锁,其请求模式为"IS"(Intent共享).使用sys.dm_exec_requests将命令状态显示为"已挂起",将等待类型显示为"ASYNC_NETWORK_IO".只要用户打开Access前端,就会保留这些锁,并阻止对所涉及的表执行任何更新/删除/截断操作.现在,如果用户滚动到 Access中记录集的末尾,则会释放锁定!

当用户点击以在前端显示单个记录时,会出现第二个问题.当屏幕上显示单个记录时,SQL Server DMV会显示以下锁定:3x对象,1x密钥,1x页面.密钥是共享锁,其他是意图共享.同样,命令状态暂停,等待类型为ASYNC_NETWORK_IO.只要用户正在查看记录,就会保留这些锁

我们需要在无限期的基础上停止访问这些锁.不幸的是,MS Access不属于我的技能组合,因此我不知道需要做些什么来解决这个问题.

sql-server ms-access

4
推荐指数
1
解决办法
8607
查看次数

Can an ASP.Net page implement an interface without using a codebehind page?

I have an ASP.Net page that needs to implement an interface class I've created, but since the code in this page is inline, there's no class declaration, and therefore no place to put the "Implements IMyInterface" line. I also tried using the @interface page directive but it appears this only works for built in .Net framework classes.

Are there any options other than using a codebehind page just to edit the class declaration line?

.net c# vb.net asp.net

2
推荐指数
1
解决办法
1252
查看次数

为什么此SQL查询失败

下面的查询意外失败,出现算术溢出错误.

select IsNull(t2.val, 5005)
from(

SELECT 336.6 as val UNION ALL 
SELECT NULL

) as t2
Run Code Online (Sandbox Code Playgroud)

"将int转换为数据类型numeric的算术溢出错误."

奇怪的是,如果修改查询以删除NULL并将其替换为与null coalesce(5005)中相同的值,则它会运行而没有问题

select IsNull(t2.val, 5005)
from(

SELECT 336.6 as val UNION ALL 
SELECT 5005

) as t2
Run Code Online (Sandbox Code Playgroud)

另外,省略SELECT NULL行完全允许查询无问题地运行

select IsNull(t2.val, 5005)
from(

SELECT 336.6 as val

) as t2
Run Code Online (Sandbox Code Playgroud)

如果IsNull函数中的coalesce值更改为一个小于足以在子查询中转换为十进制而不加宽的整数,则查询将运行

select IsNull(t2.val, 500)
from(

SELECT 336.6 as val UNION ALL
SELECT NULL

) as t2
Run Code Online (Sandbox Code Playgroud)

在SQL Server 2005和SQL Server 2008中都进行了测试.

通常将整数与小数组合是无缝的,SQL Server会将整数和小数转换为足以容纳两者的十进制类型.但由于某种原因,运行查询,其中从UNION和IsNull都发生转换,导致转换失败.

有人知道为什么吗?

sql sql-server

2
推荐指数
2
解决办法
156
查看次数

标签 统计

sql-server ×3

c# ×2

.net ×1

asp.net ×1

datetime2 ×1

ms-access ×1

raii ×1

sql ×1

sql-server-2008 ×1

vb.net ×1