1

参考: VS 2010 と Access 2010 を使用して Windows デスクトップ アプリケーションを作成する

データベースにクエリを実行してアクセスしようとしているときに、VB.Net で奇妙な動作に遭遇しました。Access で実行すると、レコードを含むデータセットを生成する SQL スクリプトがあります。しかし、(同じアクセス データベースに接続する) VB.Net で同じスクリプトを実行すると、クエリは結果を生成しません。ここに私の.Netスクリプトがあります:

Dim strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & item.Text
Dim conn As System.Data.OleDb.OleDbConnection
Dim da As OleDbDataAdapter
Dim s As String = " SELECT" & vbCrLf _ 
   & "  GrantData.[Grant Number]," & vbCrLf _
   & " OutputData.[Output], " & vbCrLf _
   & " OutputData.PlanNumber, " & vbCrLf _
   & " OutputData.ActualNumber" & vbCrLf _
   & " FROM " & vbCrLf _
   & " Themes, " & vbCrLf _
   & " GrantThemes, " & vbCrLf _
   & " GrantData," & vbCrLf _
   & " OutputData" & vbCrLf _
   & " WHERE" & vbCrLf _
   & " Themes.ThemeID = GrantThemes.ThemeId AND" & vbCrLf _
   & " GrantData.[Grant Number] = GrantThemes.[Grant Number] AND" & vbCrLf _
   & " GrantData.[Grant Number] =OutputData.[Grant Number] AND" & vbCrLf _
   & " ( " & vbCrLf _
   & " (GrantData.Status in ('Cleared', 'Completed', 'Closed')) AND" & vbCrLf _
   & " (Themes.Theme Like '*infrastructure*' or Themes.Theme Like '*construction*')" & vbCrLf _
   & " )" & vbCrLf _
   & " ORDER BY" & vbCrLf _
   & " GrantData.[Grant Number];"


conn = New System.Data.OleDb.OleDbConnection(strConnectionString)
conn.Open()
Try
   da = New OleDbDataAdapter(s, strConnectionString)
   da.Fill(ds, sqlStatement)   
Catch ex As Exception   

Finally
End Try

したがって、私が言ったように、これを実行すると、データセットは空になります (ds にブレークポイントがあり、データセットを表示できます)。しかし、SQL 文字列にブレーク ポイントを設定して Access データベースにコピーすると、問題なく動作します。誰にも提案はありますか?

4

1 に答える 1

6

Likeワイルドカードに問題があります。

これはAccessセッション内で機能しますが...

Themes.Theme Like '*infrastructure*' or Themes.Theme Like '*construction*'

OleDb%で置き換える必要があります...*

Themes.Theme Like '%infrastructure%' or Themes.Theme Like '%construction%'

または、OleDb から Access と同じ結果が得られるクエリを使用する場合は、ALike代わりにLike.

Themes.Theme ALike '%infrastructure%' or Themes.Theme ALike '%construction%'
于 2013-10-16T19:44:36.390 に答える