2009-08-31 107 views
0

有没有人有任何想法如何在企业库数据访问应用程序块的动态查询中使用count(*)?使用企业库计数(*)

我使用:

Public Shared Function selectCount(ByVal code As String) As Integer 
    Dim query As String = "SELECT COUNT(*) " & _ 
          "FROM " & _ 
          "Data " & _ 
          "WHERE " & _ 
          "Code = '" & code & "'" 
    Dim db As Database = DatabaseFactory.CreateDatabase() 
    Return db.ExecuteScalar(System.Data.CommandType.Text, query) 
End Function 

这个错误被抛出:

的ITransactionLocal接口不被 'Microsoft.Jet.OLEDB.4.0' 提供支持。本地交易对于当前提供者不可用。

+0

其他查询是否可用?使用相同的代码只是没有count()? – 2009-08-31 07:18:54

+0

我查了一下错误信息,发现通过向我的连接字符串中添加“OLE DB Services = -4”,在使用上面的代码时清除了问题。 所以看起来我的代码在技术上不是错误的,只是连接字符串的一些问题(虽然它以前工作正常!) – Andrew 2009-08-31 22:39:10

回答

0

我抬头看了一下错误信息,发现通过向我的连接字符串中添加“OLE DB Services = -4”,在使用上面的代码时清除了问题。所以看起来我的代码在技术上不是错误的,只是连接字符串有问题(虽然以前工作正常!)

+0

为什么你创建并接受你自己的答案?为什么不接受研讨会Alex的答案,这是正确的。 – 2009-09-19 09:15:23

+0

亚历克斯的回答是正确的。但是,这不是我的问题的根源。我的实现也有效,但直到我将“OLE DB Service = -4”添加到连接字符串中,这就是为什么我创建了自己的答案,以防出于同样的原因出现同样的问题。如果人们觉得这不是正确的做法,我很乐意改变对Alex的答案。 – Andrew 2009-09-20 12:11:34

3

您是否尝试过创建SQLCommand,然后使用Cmd。 ExecuteScalar

另外,您在查询中使用了一个变量!这绝对需要一个参数化的SQLCommand来避免SQL代码注入!如果你能保证安全与否,无所谓。最佳做法是始终使用参数。 (为什么?因为另一位偷看代码的开发人员将通过示例进行学习,并且您不希望他们学习不好的做法!)

您是否已尝试向连接字符串中添加“OLE DB Services = -4” ?我听说这可能会解决这个交易错误。 :-)(好吧,我承认,我在阅读你的评论后编辑了这个答案。) 无论如何,这个选项与数据库的transactionenlistment有关。您通过添加此值来覆盖设置。 (是的,我无耻地Google搜索了它。)看起来您的OLE DB服务已被修改,或者它们可能只是不同,因为您在不同的系统上。

+0

你是绝对正确的。感谢您的建议;我将改变我现在使用的所有参数:D – Andrew 2009-08-31 22:40:16