【问题标题】:Count(*) using Enterprise LibraryCount(*) 使用企业库
【发布时间】:2009-08-31 07:17:20
【问题描述】:

有人知道如何在企业图书馆数据访问应用程序块的动态查询中使用 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 接口。当前提供者无法进行本地交易。

【问题讨论】:

  • 其他查询有用吗?使用相同的代码,但不使用 count()?
  • 我查看了错误消息,发现通过在我的连接字符串中添加“OLE DB Services=-4”可以在使用上面的代码时解决问题。所以看来我的代码在技术上并没有错,只是连接字符串出了点问题(虽然之前工作正常!)

标签: asp.net enterprise-library


【解决方案1】:

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

另外,您在查询中使用了变量!这绝对需要一个参数化的 SQLCommand 来避免 SQL 代码注入!不管你能不能保证它是安全的。最佳实践是始终使用参数。 (为什么?因为另一个偷看你代码的开发者会通过例子来学习,而你不希望他们学习不好的做法!)

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

【讨论】:

  • 你说得对。感谢您的建议;我现在将更改所有查询以使用参数:D
【解决方案2】:

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

【讨论】:

  • 您为什么要创建并接受您自己的答案?为什么不接受 Workshop Alex 的回答,没错。
  • 亚历克斯的回答是正确的。但是,这不是我问题的根本原因。我的实现也有效,但直到我在连接字符串中添加了“OLE DB Service=-4”,这就是我创建自己的答案的原因,以防有人出于同样的原因遇到同样的问题。如果人们觉得这不是正确的做法,我很乐意将答案更改为 Alex 的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多