2015-03-13 107 views
0

非常感谢您为我的应用程序中的一个错误提供一些帮助,这些错误令我困惑!SQL SELECT COUNT(*)有时会返回数据

我检查中包含的人的,将personId我期待了使用表格的行数:

cmd.commandtext = "SELECT Count (*) from PeopleDetails where PersonID = '11111'" 
count = cmd.executescalar() 

这个工程的98%的时间。 偶尔计数变量有被查询的行的第一列的数据,这是表中称为rowid的GUID。它没有满足条件的行数的预期整数。连接处于活动状态,如果查询重复,则返回正确的计数值。

当服务器是早上最繁忙的第一件事情时,对数据库有多个同时查询时,可以看到这种情况。

最受欢迎的帮助!

SQL server 2003,vb.net

感谢您的期待!

+0

你有没有其他的SQL语句在相同的方法,cmd.commandtext可能返回第一列? – Adil 2015-03-13 12:56:15

+3

这不是你的真实代码。你如何传递PersonID值?还有其他几行代码与db进行交互?请显示更多的上下文。有了这么几行代码,就没有可能获得记录的行为 – Steve 2015-03-13 13:00:41

+0

您是否为每个命令创建了一个新的'SqlConnection'?这看起来像你正在重复使用来自多个线程的相同的'SqlConnection'。 – Luaan 2015-03-13 13:07:17

回答

1

您是否为每个命令创建了新的SqlConnection?这看起来像你从多个线程重复使用相同的SqlConnection

SqlConnection/SqlCommand不是线程安全的,所以你真的想避免从不同线程同时使用它。一般来说,不要害怕为你发送的每个命令创建一个新的SqlConnection(或者至少对于给定的方法范围)。启用连接池后,它几乎可以自由地这样做,并且可以为并发问题节省很多的损失。