附加信息:从'Int32'到'DateTime'的无效演员表

时间:2013-08-12 08:55:04

标签: vb.net ms-access

我尝试过其他代码。

这是我正在使用的所有代码......

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 addstring As String
Dim cnn As OleDbConnection = New OleDbConnection
Dim ds As DataSet = New DataSet
Dim da As OleDbDataAdapter
Dim tables As DataTableCollection = ds.Tables
Dim cmd As New OleDb.OleDbCommand
Dim dr As System.Data.OleDb.OleDbDataReader


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    t_date.Text = Today

    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
    cnn.ConnectionString = connString
    da = New OleDbDataAdapter("Select Customer_Name, Job, Amount from [Transaction] 
    where Trans_date = Date()", cnn)
    da.Fill(ds, "Transaction")

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

Private Sub btmclose_Click(sender As Object, e As EventArgs) Handles btmclose.Click
    Me.Close()
End Sub

Private Sub C_job_SelectedIndexChanged(sender As Object, e As EventArgs) Handles C_job.SelectedIndexChanged
    Dim selected As String = C_job.SelectedItem.ToString()
    If selected = "Internet" Then
        t_amount.Text = "20"
        php.Visible = True
    ElseIf selected = "Games" Then
        t_amount.Text = "10"
        php.Visible = True
    ElseIf selected = "Print (short)" Then
        t_amount.Text = "1"
        php.Visible = True
    ElseIf selected = "Print (long)" Then
        t_amount.Text = "2"
        php.Visible = True
    ElseIf t_amount.Text = "" Then
        php.Visible = False
    End If
End Sub

Private Sub btnadd_Click(sender As Object, e As EventArgs) Handles btnadd.Click

    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
    cnn.ConnectionString = connString
    cnn.Open()

    cmd.Connection = cnn
    addstring = "insert into Transaction (Customer_Name, Job, Trans_date, Amount ) " & _
        " values (@cname, @job, @tdate, @amount)"
    Using conn As New OleDbConnection(connString)
        Using comm As New OleDbCommand()
            With comm
                .Connection = conn
                .CommandType = CommandType.Text
                .CommandText = addstring
                .Parameters.AddWithValue("@cname", C_name.Text)
                .Parameters.AddWithValue("@job", C_job.Text)
                .Parameters.AddWithValue("@date", Convert.ToDateTime(t_date.Text.Length))
                .Parameters.AddWithValue("@amount", Convert.ToInt64(t_amount.Text))
            End With

            Try
                conn.Open()
                comm.ExecuteNonQuery()
            Catch ex As Exception

            End Try
        End Using
    End Using
    cmd.ExecuteNonQuery()
    cnn.Close()
End Sub

End Class

ERROR:

Additional information: Invalid cast from 'Int32' to 'DateTime'.

我的表名是Transaction(Transaction_Id,Customer_name,Job,t_date,amount) - > Transaction_Id是ms-access中的AutoIncrement ..

所以我项目中的文本框是:

  • Customer_Name,
  • 量,
  • t_date

组合框是:

  • 工作

2 个答案:

答案 0 :(得分:1)

您的问题似乎就在这一行:

Convert.ToDateTime(t_date.Text.Length)

您尝试将文本字段的长度(Int32)转换为DateTime,但这不会起作用。

您可能只想这样做:

Convert.ToDateTime(t_date.Text)

参考&样本:MSDN Convert.ToDateTime

答案 1 :(得分:0)

这是导致异常的行:

Convert.ToDateTime(t_date.Text.Length)

可能应该是:

Convert.ToDateTime(t_date.Text)