2009-08-31 11 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()を使わずに同じビットのコードを使用していますか? –

+0

エラーメッセージを見て、 "OLE DB Services = -4"を接続文字列に追加すると、上記のコードを使用しているときに問題が解決されました。 私のコードは技術的に間違っていないようですが、接続文字列に問題があります(これまではうまくいっていましたが)。 – Andrew

答えて

0

エラーメッセージを見て、上記のコードを使用しているときに、接続文字列に "OLE DB Services = -4"を追加すると問題を解決したことがわかりました。だから、私のコードは技術的に間違っていないようですが、接続文字列の問題がありました(これまではうまくいっていましたが)。

+0

あなたは自分で答えを作成して受け入れましたか?なぜワークショップアレックスの答えを受け入れていない、それは正しいです。 –

+0

アレックスの答えは正しいです。しかし、それは私の問題の根本的な原因ではありませんでした。私の実装もうまくいきましたが、接続文字列に "OLE DB Service = -4"を追加するまで、これは動作しませんでした。なぜなら、同じ理由で誰かが同じ問題を抱えていたとしても、人々がこれが正しい方法ではないと感じたら、私はAlexの答えを変えてうれしいです。 – Andrew

3

SQLCommandを作成してから、Cmdを使用してみましたか? ExecuteScalar

また、クエリで変数を使用しています。これには、SQLコードの挿入を避けるために、パラメータ化されたSQLCommandが必要です。あなたが安全かどうかを保証できるかどうかは関係ありません。ベストプラクティスは常に代わりにパラメータを使用することです。 (なぜ?あなたのコードを見ている別の開発者が例で学ぶので、悪い習慣を習得したくないからです!)

接続文字列に "OLE DB Services = -4" ?私はこれがこのトランザクションエラーを解決するかもしれないと聞いてきました。 :-)(まあ、私はあなたのコメントを読んだ後、この答えを編集したと認めます) とにかく、このオプションはデータベースのtransactionenlistmentに関連しています。この値を追加して設定を上書きしています。 (ええ、私は恥知らずにそれを捜した。)それはあなたのOLE DBサービスが変更されているか、おそらく彼らは別のシステム上にあるために異なっているようだ。

+0

あなたは絶対に正しいです。アドバイスをいただきありがとうございます。私はすべてのクエリを今すぐパラメータを使用するように変更します:D – Andrew

関連する問題