0

私はVB 2012でいくつかの練習をしています.Microsoft Access 2013のデータベースにすでに接続しています.実行するとエラーが発生します.Select Trans_date from [Transaction] where Trans_date = SYSDATE

これが私のコードです...

Imports System.Data
Imports System.Data.OleDb
Imports System.Data.Odbc
Imports System.Data.DataTable

Public Class Form1

Dim provider As String
Dim dataFile As String
Dim connString As String
Dim myConnection As OleDbConnection = New OleDbConnection
Dim ds As DataSet = New DataSet
Dim da As OleDbDataAdapter
Dim tables As DataTableCollection = ds.Tables

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    provider = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="
    dataFile = "C:\Users\hp-2\Documents\Visual Studio 2012\Projects\Delta\Delta.mdb"

    connString = provider & dataFile
    myConnection.ConnectionString = connString
     da = New OleDbDataAdapter("Select Trans_date from [Transaction] where Trans_date = SYSDATE" 
    & t_date.Text & "'", myConnection)
    da.Fill(ds, "Transaction")

    Dim view1 As New DataView(tables(0))
    Dim source1 As New BindingSource()
    source1.DataSource = view1
    showdata.DataSource = view1
    showdata.Refresh()
   End Sub

  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

  End Sub
  End Class

ここに私のエラーがあります..

An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll

Additional information: Syntax error in string in query expression 'Trans_date = SYSDATE''.
4

2 に答える 2

2

Date()の代わりに使用してみてくださいSYSDATE

于 2013-08-11T12:02:28.667 に答える
1

パラメータ化されたクエリを使用する必要があります。例として

Dim query = "Select Trans_date from [Transaction] " & _
            "where Trans_date = ?" 
da = New OleDbDataAdapter(query, myConnection)
da.SelectCommand.Parameters.AddWithValue("@p1", DateTime.Today)
da.Fill(ds, "Transaction")

ここでは?、クエリ テキスト内のプレースホルダーが、コレクションに追加されたパラメーターと共にフレームワークによって使用されSelectCommand、基になるデータベース エンジンに渡す正しいクエリが作成されます。

OleDbでは、パラメーターは (他のネット データベース ドライバーが行うように) 特定の名前では認識されず、クエリ テキスト内の位置によってのみ認識されます。したがって、最初のプレースホルダー (?) が最初のパラメーター (@p1) に関連付けられ、その値がフォーマットされて MSAccess エンジンに渡されます。

パラメーターを使用してテキスト コマンドを渡すことは、非常に重要です。日付、文字列、10 進数の形式を気にする必要はありません。そして (MSAccess では可能性は低くなりますが、常に可能性があります) SQL インジェクションにさらされるコードを記述しません。

于 2013-08-11T11:58:46.793 に答える