2012-02-27 7 views
1

Visual BasicのWindowsフォームで、日付と時刻を選択するためのDateTime Pickerがあります。DateTime Pickerから値を挿入するとエラーが発生する

この値は、パラメータ化されたクエリを使用してAccessデータベースに挿入しています。しかし、私はフォームを実行しているので、私はエラーData type mismatch in criteria expressionを得続けます。

[挿入]コマンドからパラメータを削除すると、このフィールドは正常に入力されます。しかし、私がそれを戻すと、うまくいきません。

Private Sub AcceptBtn_Click(sender As System.Object, e As System.EventArgs) Handles AcceptBtn.Click 

      Dim InsertTournamentQuery As String = "INSERT INTO Tournaments (SanctioningID, TournamentName, TournamentVenue, Game, Format, OrganizerID, PairingSystem, TournamentDateTime) VALUES (?,?,?,?,?,?,?,?)" 
      Dim LastRowSelect As String = "SELECT @@IDENTITY" 
      Dim LastRowID As Integer 
      Dim DBconnection As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Master.mdb" 

      Using connection As New OleDb.OleDbConnection(DBconnection) 
       Using cmd As New OleDb.OleDbCommand(InsertTournamentQuery, connection) 
        cmd.Parameters.AddWithValue("?", SanctionID) 
        cmd.Parameters.AddWithValue("?", Trim(TrnNameTxt.Text)) 
        cmd.Parameters.AddWithValue("?", Int(TrnVenueLst.SelectedValue)) 
        cmd.Parameters.AddWithValue("?", GameLst.SelectedValue) 
        cmd.Parameters.AddWithValue("?", Convert.ToInt32(FormatLst.SelectedValue)) 
        cmd.Parameters.AddWithValue("?", OrganizerID) 
        cmd.Parameters.AddWithValue("?", Convert.ToInt32(PairingLst.SelectedValue)) 
        cmd.Parameters.AddWithValue("?", TrnDate.Value) 

        connection.Open() 
        cmd.ExecuteNonQuery() 
        cmd.CommandText = LastRowSelect 
        LastRowID = cmd.ExecuteScalar() 
        connection.Close() 
       End Using 
End Sub 
+0

ミリ秒を取り除くために私が知っている最も簡単な方法は、このような方法を作ることです? –

+0

TrnDateは日付ピッカーからのフォームコントロールです。 .Valueはユーザーが選択した結果です。 –

答えて

1

DateTime値を変換してデータベースに挿入してみてください。

cmd.Parameters.AddWithValue("?", Convert.ToDateTime(TrnDate.Value.ToString)) 
+0

前と同じエラーが発生しました:/ –

+0

データベース内のすべてのデータ型が、挿入している値と正しく一致していることを確認してください。 –

+0

本当に正しいです。 TournamentDateの列は、Date/Timeに設定されています。 –

1

それが明確な要求の例を投稿してください作るために要求

に日付値の前後に#を追加してみてください、あなたが渡すときに、このエラーが発生し

Debug.Print "INSERT INTO Tournaments (SanctioningID, TournamentName, TournamentVenue, Game, Format, OrganizerID, PairingSystem, TournamentDateTime) VALUES (" _ 
     & SanctionID & ",'" & Trim(TrnNameTxt.Text) & "'," & Int(TrnVenueLst.SelectedValue) & ",'" & GameLst.SelectedValue & "'," & Convert.ToInt32(FormatLst.SelectedValue) _ 
     & "," & OrganizerID & "," & Convert.ToInt32(PairingLst.SelectedValue) & "," & TrnDate.Value & ")" 
1

このコマンドを使用しますDateTimeミリ秒をパラメータとして含む値。時間の値からミリ秒を取り除くと、MS Accessはパラメータ値を問題なく受け入れます。

Public Function fixDateTimeForMsAccess(value As Date) As Date 
    Return New Date(value.Year, value.Month, value.Day, value.Hour, value.Minute, value.Second) 
End Function 

その後、あなたはこのようにそれを使用することができます:TrnDate変数のデータ型は何

cmd.Parameters.AddWithValue("?", fixDateTimeForMsAccess(TrnDate.Value)) 
関連する問題