小编ant*_*tik的帖子

SELECT语句后需要行计数:什么是最佳SQL方法?

我正在尝试从单个表中选择一个列(没有连接),我需要计算行数,理想情况是在开始检索行之前.我已经提出了两种方法来提供我需要的信息.

方法1:

SELECT COUNT( my_table.my_col ) AS row_count
  FROM my_table
 WHERE my_table.foo = 'bar'
Run Code Online (Sandbox Code Playgroud)

然后

SELECT my_table.my_col
  FROM my_table
 WHERE my_table.foo = 'bar'
Run Code Online (Sandbox Code Playgroud)

方法2

SELECT my_table.my_col, ( SELECT COUNT ( my_table.my_col )
                            FROM my_table
                           WHERE my_table.foo = 'bar' ) AS row_count
  FROM my_table
 WHERE my_table.foo = 'bar'
Run Code Online (Sandbox Code Playgroud)

我这样做是因为我的SQL驱动程序(SQL Native Client 9.0)不允许我在SELECT语句中使用SQLRowCount,但我需要知道结果中的行数,以便在为其分配数据之前分配数组.遗憾的是,在我的程序的这个方面,使用动态分配的容器不是一个选项.

我担心可能会出现以下情况:

  • 发生SELECT计数
  • 发生另一条指令,添加或删除一行
  • 发生数据SELECT,突然数组的大小错误.
    - 在更糟糕的情况下,这将尝试写入超出数组限制的数据并使我的程序崩溃.

方法2是否禁止此问题?

此外,两种方法中的一种会更快吗?如果是这样,哪个?

最后,是否有一个更好的方法我应该考虑(也许是一种方法来指示驱动程序使用SQLRowCount返回SELECT结果中的行数?)

对于那些问的人,我使用的是Native C++和上面提到的SQL驱动程序(由Microsoft提供).

sql odbc sqlncli

32
推荐指数
2
解决办法
22万
查看次数

使用System.DirectoryServices.AccountManagement时的DirectoryServicesCOMException

我正在尝试使用System.DirectoryServices.AccountManagment确定用户是否是给定组的成员.

  • 我在64位系统上的SharePoint 2007中的SharePoint WebPart中执行此操作.
  • 项目目标是.NET 3.5
  • 在web.config中启用了模拟.
  • 有问题的IIS站点使用IIS应用程序池,并将域用户配置为标识.

我可以实例化PrincipalContext如下:

PrincipalContext pc = new PrincipalContext(ContextType.Domain)

接下来,我试着抓住一个校长:

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
   GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, "MYDOMAIN\somegroup");
   // snip: exception thrown by line above.
}
Run Code Online (Sandbox Code Playgroud)

以上和UserPrincipal.FindByIdentity用户SAM都抛出DirectoryServicesCOMException:"登录失败:未知用户名或密码错误"

我已经尝试将完整的SAMAccountName传递给FindByIdentity(以MYDOMAIN \用户名的形式)或只是用户名而行为没有变化.我已尝试使用其他凭据HostingEnvironment.ImpersonateSPSecurity.RunWithElevatedPrivileges方法执行代码,并且也会遇到相同的结果.

我还尝试使用域名实例化我的上下文:

Principal Context pc = new PrincipalContext(ContextType.Domain, "MYDOMAIN");

这引发了PrincipalServerDownException:"无法联系到服务器."

我正在研究一台相当硬化的服务器.我没有锁定系统,所以我不确定它到底做了什么.如果我需要为我的池标识用户或域安全策略分配凭据以使这些凭据有效,我可以相应地配置域.是否有任何设置会阻止我的代码运行?我在代码本身中遗漏了什么吗?这在SharePoint网站中是不可能的吗?

编辑:经过进一步测试,我的代码在面向.NET 4.0的控制台应用程序中测试时正常运行.我针对不同的框架,因为在针对.NET 3.5出于某种原因我没有在控制台应用程序中使用AccountManagement.

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
using (UserPrincipal adUser = UserPrincipal.FindByIdentity(pc, "MYDOMAIN\joe.user"))
using (GroupPrincipal adGroup …
Run Code Online (Sandbox Code Playgroud)

c# sharepoint-2007 account-management c#-3.0

6
推荐指数
1
解决办法
4528
查看次数

返回libc - 非法指令

我正在搞乱缓冲区溢出,特别是返回到libc类.

我有以下易受攻击的代码:

#include<stdio.h>
#include<string.h>

main( int argc, char **argv)
{
    char buffer[80];
    getchar();
    strcpy(buffer, argv[1]);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

我用gcc-2.95(no -fstack-protector)用-mpreferred-stack-boundary=2旗子编译它.我跟着回到了"黑客:剥削的艺术"的 libc章节.

首先,我禁用了ASLR:

$ cat /proc/sys/kernel/randomize_va_space 
0
Run Code Online (Sandbox Code Playgroud)

我发现了以下地址system:

$ cat find_system.c
int main() {
    system("");
    return 0;
}
$ gdb -q find_system
Reading symbols from /home/bob/return_to_libc/find_system...(no debugging symbols found)...done.
(gdb) break main
Breakpoint 1 at 0x8048416
(gdb) run
Starting program: /home/bob/return_to_libc/find_system 

Breakpoint 1, 0x08048416 in main ()
(gdb) p system
$1 = {<text variable, no …
Run Code Online (Sandbox Code Playgroud)

c security exploit buffer-overflow

6
推荐指数
1
解决办法
1554
查看次数

由2个SQL连接创建的死锁,每个使用事务,不同的表,两个表之间的外键约束

环境

我正在使用一个C++应用程序,它使用SQL Native Client 9.0与SQL Server 2000数据库进行通信.

脚本

  • 向DBMS打开2个连接
  • 每个连接都设置为使用事务
  • 关于Connection1工作的查询TableA
  • 关于Connection2工作的查询TableB
  • TableB在该key_id字段中有一个外键约束TableA

我构造了执行以下操作的函数:

begin a transaction on Connection1 & Connection2
prepare a query in TableA on Connection1
prepare a query on TableB on Connection2

begin loop over some_data
   (1) insert into key_id on TableA

   begin loop over some_other_data
      (2) insert into TableB using same key_id as in Table A
   end loop
end loop

commit on Connection1
commit on Connection2 …
Run Code Online (Sandbox Code Playgroud)

c++ sql sql-server sqlncli

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