使用Enterprise Library计算(*)

时间:2009-08-31 07:17:21

标签: asp.net enterprise-library

有没有人知道如何在企业库数据访问应用程序块的动态查询中使用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

抛出此错误:

'Microsoft.Jet.OLEDB.4.0'提供程序不支持ITransactionLocal接口。当前提供商无法使用本地交易。

2 个答案:

答案 0 :(得分:3)

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

此外,您在查询中使用变量!这肯定需要参数化SQLCommand以避免SQL代码注入!如果你可以保证它是安全的,那没关系。最佳做法是始终使用参数。 (为什么?因为另一个偷看你的代码的开发人员将通过示例学习,而你不希望他们学习不良实践!)

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

答案 1 :(得分:0)

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