小编stu*_*ell的帖子

总是使用nvarchar(MAX)有什么缺点吗?

在SQL Server 2005中,使所有字符字段nvarchar(MAX)而不是明确指定长度是否有任何缺点,例如nvarchar(255)?(除了显而易见的一个,你无法限制数据库级别的字段长度)

sql sql-server sql-server-2005

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

从多列中选择最小值的最佳方法是什么?

给出SQL Server 2005中的下表:

ID   Col1   Col2   Col3
--   ----   ----   ----
1       3     34     76  
2      32    976     24
3       7    235      3
4     245      1    792
Run Code Online (Sandbox Code Playgroud)

编写产生以下结果的查询的最佳方法是什么(即产生最终列的查询 - 包含每行的Col1,Col2和Col3中的minium值的列)?

ID   Col1   Col2   Col3  TheMin
--   ----   ----   ----  ------
1       3     34     76       3
2      32    976     24      24
3       7    235      3       3
4     245      1    792       1
Run Code Online (Sandbox Code Playgroud)

更新:

为了澄清(正如我在演讲中所说),在真实场景中,数据库已正确规范化.这些"数组"列不在实际表中,而是在报表中所需的结果集中.新要求是报告还需要此MinValue列.我无法更改基础结果集,因此我期待T-SQL获得一个方便的"走出监狱卡".

我尝试了下面提到的CASE方法并且它有效,尽管它有点麻烦.它也比答案中说明的更复杂,因为你需要满足同一行中有两个最小值的事实.

无论如何,我想我会发布我目前的解决方案,鉴于我的限制,它的效果非常好.它使用UNPIVOT运算符:

with cte (ID, Col1, Col2, Col3)
as
(
    select ID, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005 min

67
推荐指数
9
解决办法
20万
查看次数

是否有更快的GDI GetPixel()替代品?

我GetPixel()在.NET应用程序中使用gdi32.dll来在屏幕上的任何位置采样像素的颜色.它工作正常,但它对我来说是一个主要的性能瓶颈.

有更快的方法吗?

.net windows winapi gdi+ gdi

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

如何使用Linq to SQL查找行的ROW_NUMBER()

Linq to SQL ROW_NUMBER()用于分页目的,即当你使用Skip()和Take()时.

但是,我似乎无法ROW_NUMBER()在查询中找到实际访问值的方法.我需要在查询中找到记录的ROW_NUMBER()(不带回所有记录).

我在T-SQL和Linq to Objects中成功完成了这项工作,但Linq to SQL解决方案难以实现.

在Linq to Objects中我可以得到如下行号:

var rowTarget =
    mainQuery
        .Select((obj, index) => new { obj.ID, Index = index })
        .SingleOrDefault(x => x.ID == targetID);

// rowTarget.Index is the answer
Run Code Online (Sandbox Code Playgroud)

但Linq to SQL不支持Select()使用索引参数的覆盖(这是有道理的,实际上 - ROW_NUMBER()只有在使用Skip()和Take()时才会使用).

我似乎找不到一个不会导致从数据库返回所有记录的解决方案.

这甚至可能吗?

.net c# linq-to-sql

7
推荐指数
1
解决办法
7198
查看次数

为什么我的IAuthorizationPolicy不使用我的CustomPrincipal设置Thread.CurrentPrincipal?

对于我的WCF服务,我已经实现了IAuthorizationPolicy并将其连接起来(并且可以确认它正在被使用).

在Evaluate()方法中,我设置了一个自定义主体,如下所示:

evaluationContext.Properties["Principal"] = myCustomPrincipal;
Run Code Online (Sandbox Code Playgroud)

但是,当调用服务时,Thread.CurrentPrincipal是GenericPrincipal!

我的服务行为配置如下:

<serviceAuthorization principalPermissionMode="Custom">
    <authorizationPolicies>
        <add policyType="MyNamespace.MyPrincipalAuthorizationPolicy, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </authorizationPolicies>
</serviceAuthorization>
Run Code Online (Sandbox Code Playgroud)

我试图使用反射器来查看发生了什么,但没有看到任何有用的东西.

我做错了吗?我缺少一些配置吗?

c# wcf wcf-security

5
推荐指数
1
解决办法
1410
查看次数

使用成员访问lambda表达式来参数化LINQ to SQL谓词

我有一个需要在整个地方重用的查询,我需要改变哪个属性/列用于连接.

我希望能做的是:

query = RestrictByProp(query, x=>x.ID);
Run Code Online (Sandbox Code Playgroud)

极其简化的RestrictByProp()可能是*:

private static IQueryable<Role> RestrictByProp(IQueryable<Role> query, 
                                               Func<Role, int> selector)
{
    return query.Where(x => selector(x) == 1);
}
Run Code Online (Sandbox Code Playgroud)

问题是即使这个简单的实现也会导致运行时异常:

Method 'System.Object DynamicInvoke(System.Object[])' has no 
supported translation to SQL.
Run Code Online (Sandbox Code Playgroud)

**(这里我只是添加一个简单的'where'子句 - 在我的实际代码中,我将使用lambda来选择要用于连接的属性.)*

我发现这很奇怪,因为如果成员访问lambda是内联完成的,那很好:

 private static IQueryable<Role> RestrictByID(IQueryable<Role> query)
 {
     return query.Where(x=> x.ID == 1);
 }
Run Code Online (Sandbox Code Playgroud)

LINQ to SQL也很高兴,如果你传入一个Expression<Func<Role, bool>>(即参数是x=>x.ID == 1),但是这会使对象失败,因为我需要在查询中确定右手操作数的值.

有没有办法以某种方式mged lambda表达式,RestrictByProp()以便LINQ to SQL知道如何生成SQL?

.net c# linq linq-to-sql

5
推荐指数
1
解决办法
1714
查看次数

从VBA(MS Access)解密PGP加密文件的最简单方法

我需要编写从FTP位置获取PGP加密文件并处理它们的代码.这些文件将使用我的公钥加密(不是我还有一个).显然,我需要一个可以在Microsoft Access中使用的PGP库.你能推荐一款易于使用的产品吗?

我正在寻找一些不需要大量PKI知识的东西.理想情况下,可以轻松生成一次性私钥/公钥对,然后有一个简单的解密例程.

security encryption ms-access pgp

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

WIF不适用于ASP.NET MVC 4

我有Windows Identity Foundation与MVC 3配合良好.但是,在MVC 4中,似乎WIF没有机会处理未授权的响应并重定向到STS - 而是我被重定向到login.aspx,这是很好的老表格认证.

在MVC 3中,我曾经在web.config中禁用表单auth,但它在MVC 4中不起作用.

我知道MVC 4中的身份验证和授权已经发生了变化,但是我的Google技能似乎已经让我感到厌烦,而且我似乎无法找到如何阻止表单身份验证干扰.有什么指针吗?

asp.net-mvc forms-authentication wif asp.net-mvc-4

3
推荐指数
1
解决办法
1198
查看次数