私は最近MS SQLServerにアクセスして作成したプロジェクトを移動しましたが、もちろんこれはSQL文のコードの一部を変更する必要があることを意味します。SQL Serverの構文切り替えへのアクセス
私はフィールドDateRenew
が30日以内にすべてのレコードを取得しているこのサブルーチンを持っています...これをSQLに変換するにはどうすればいいですか?付近に正しくない構文「#」:現時点では私はタイプ「System.Data.OleDb.OleDbException」の未処理の例外がMaintenanceControl.exe
に発生しました追加情報
次のエラーメッセージを取得します。
Private Sub btn30Days_Click(sender As Object, e As EventArgs) Handles btn30Days.Click
Dim td As String
Dim sd As String
sd = Format(Today.AddDays(31), "MM/dd/yyyy")
td = Format(Today, "MM/dd/yyyy")
Try
sql = "SELECT * FROM dbo.tblContracts WHERE DateRenew BETWEEN #" & sd & "# AND #" & td & "#;"
conAd = New OleDb.OleDbDataAdapter(sql, con)
conset = New DataSet
conAd.Fill(conset)
ugModules.DataSource = conset
Catch ex As Exception
errorLog(ex.Message, ex.StackTrace)
MsgBox("Failed to retrieve contract information from database, refer to error log")
End Try
End Sub
あなたのプログラムをSqlServerに切り替える場合は、なぜOleDbを使用するのですか? SqlClientには、Sql Serverに固有のクラスがあります。ただし、SqlServerの日付には#が付いていません。いずれの場合でも、文字列の連結を停止する必要がありますが、パラメータを使用する必要があります.SQLサーバーとアクセスの違いを解析する必要はありません。<データベース名をここに入れてください> – Steve
* *文字列を連結してクエリを作成するのではなく、 'DateTime'の値を文字列に変換してサーバーに' DateTime'値に変換させないようにするため、ここで役立ちます。 *紹介する*完全な型を使用する場合には存在しないような書式設定の問題は、パラメータ化で可能です(SQLインジェクションを同時に避けることもできます)。 –
http://stackoverflow.com/questions/12048152/oledb-parameterized -query –