我在运行项目时不断出错
I keep getting errors when I run my project
当我运行我的项目时,它一直给我错误。第一个例外是 da.Fill(dt)。它说 IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。
第二个异常在 cmd.ExecuteNonQuery() 处,表示 INSERT INTO 语句中存在语法错误。
请帮我。我对 VB 很陌生,所以即使我看了一整天也看不出问题所在。
公开ClassTelephone_Bill
Dim cnn As New OleDb.OleDbConnection
Private Sub RefreshData()
If Not cnn.State = ConnectionState.Open Then
cnn.Open()
End If
Dim da As New OleDb.OleDbDataAdapter("SELECT Month as [Month], " & _
"Day as [Day], Year, Amount Paid, Amount Due, Mode of Payment, Company Name " & _
" FROM Transactions ORDER BY Month", cnn)
Dim dt As New DataTable
Transaction_Log.dgvTransaction.DataSource = dt
da.Fill(dt)
cnn.Close()
End Sub
Private Sub btnProceed_Click(sender As System.Object, e As System.EventArgs) Handles btnProceed.Click
Dim cmd As New OleDb.OleDbCommand
If Not cnn.State = ConnectionState.Open Then
cnn.Open()
End If
cmd.Connection = cnn
cmd.CommandText = "INSERT INTO Transactions([Month], [Day], [Year], AmountPaid, AmountDue, ModeofPayment, CompanyName) " & _
" VALUES(" & cboMonth1.SelectedItem & ",'" & cboDay1.SelectedItem & "','" & _
cboYear1.SelectedItem & "','" & txtAmount.Text & "','" & _
txtTotalCharges.Text & "','" & cboMonetary.SelectedItem & "','" & _
txtCompName.Text & "')"
cmd.ExecuteNonQuery()
RefreshData()
cnn.Close()
End Sub
Private Sub Telephone_Bill_Load(sender As Object, e As System.EventArgs) Handles Me.Load
cnn = New OleDb.OleDbConnection
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Accounts for Bill Payment Center.accdb"
Me.RefreshData()
End Sub
结束Class
Fill 中的第一个错误可能是由于使用了保留关键字和字段名称周围缺少方括号 spaces(Month, Day, Year
都是许多数据库系统的保留关键字,需要它们周围的方括号用于查询文本)
Dim da As New OleDb.OleDbDataAdapter("SELECT [Month], " & _
"[Day], [Year], [Amount Paid], [Amount Due], " & _
"[Mode of Payment], [Company Name] " & _
" FROM Transactions ORDER BY [Month]", cnn)
但是,尚不清楚您的字段名称是否有效包含 spaces。
在您的 INSERT 语句中,相同的字段似乎没有 spaces。因此,如果它们有 space,则需要将它们封装在方括号中,如果没有,则可以将它们保留在 INSERT 查询中。
应使用适当的参数化方法修复 INSERT INTO 中的错误
cmd.CommandText = "INSERT INTO Transactions([Month], [Day], [Year], " & _
"AmountPaid, AmountDue, ModeofPayment, CompanyName) " & _
" VALUES(?,?,?,?,?,?,?)"
cmd.Parameters.AddWithValue("@p1", Convert.ToInt32(cboMonth1.SelectedItem))
cmd.Parameters.AddWithValue("@p2", cboDay1.SelectedItem.ToString)
... and so on for the other fields....
请注意,在使用参数和 AddWithValue 方法时,您应该非常准确地确定传递给参数的值的种类。如果基础字段需要一个数值,您应该按预期将该值转换为适当的数据类型。例如 AmountPaid 和 AmountDue 似乎是数字字段,您应该将用户输入转换为适当的数据类型(十进制?)
当我运行我的项目时,它一直给我错误。第一个例外是 da.Fill(dt)。它说 IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。 第二个异常在 cmd.ExecuteNonQuery() 处,表示 INSERT INTO 语句中存在语法错误。 请帮我。我对 VB 很陌生,所以即使我看了一整天也看不出问题所在。
公开ClassTelephone_Bill
Dim cnn As New OleDb.OleDbConnection
Private Sub RefreshData()
If Not cnn.State = ConnectionState.Open Then
cnn.Open()
End If
Dim da As New OleDb.OleDbDataAdapter("SELECT Month as [Month], " & _
"Day as [Day], Year, Amount Paid, Amount Due, Mode of Payment, Company Name " & _
" FROM Transactions ORDER BY Month", cnn)
Dim dt As New DataTable
Transaction_Log.dgvTransaction.DataSource = dt
da.Fill(dt)
cnn.Close()
End Sub
Private Sub btnProceed_Click(sender As System.Object, e As System.EventArgs) Handles btnProceed.Click
Dim cmd As New OleDb.OleDbCommand
If Not cnn.State = ConnectionState.Open Then
cnn.Open()
End If
cmd.Connection = cnn
cmd.CommandText = "INSERT INTO Transactions([Month], [Day], [Year], AmountPaid, AmountDue, ModeofPayment, CompanyName) " & _
" VALUES(" & cboMonth1.SelectedItem & ",'" & cboDay1.SelectedItem & "','" & _
cboYear1.SelectedItem & "','" & txtAmount.Text & "','" & _
txtTotalCharges.Text & "','" & cboMonetary.SelectedItem & "','" & _
txtCompName.Text & "')"
cmd.ExecuteNonQuery()
RefreshData()
cnn.Close()
End Sub
Private Sub Telephone_Bill_Load(sender As Object, e As System.EventArgs) Handles Me.Load
cnn = New OleDb.OleDbConnection
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Accounts for Bill Payment Center.accdb"
Me.RefreshData()
End Sub
结束Class
Fill 中的第一个错误可能是由于使用了保留关键字和字段名称周围缺少方括号 spaces(Month, Day, Year
都是许多数据库系统的保留关键字,需要它们周围的方括号用于查询文本)
Dim da As New OleDb.OleDbDataAdapter("SELECT [Month], " & _
"[Day], [Year], [Amount Paid], [Amount Due], " & _
"[Mode of Payment], [Company Name] " & _
" FROM Transactions ORDER BY [Month]", cnn)
但是,尚不清楚您的字段名称是否有效包含 spaces。
在您的 INSERT 语句中,相同的字段似乎没有 spaces。因此,如果它们有 space,则需要将它们封装在方括号中,如果没有,则可以将它们保留在 INSERT 查询中。
应使用适当的参数化方法修复 INSERT INTO 中的错误
cmd.CommandText = "INSERT INTO Transactions([Month], [Day], [Year], " & _
"AmountPaid, AmountDue, ModeofPayment, CompanyName) " & _
" VALUES(?,?,?,?,?,?,?)"
cmd.Parameters.AddWithValue("@p1", Convert.ToInt32(cboMonth1.SelectedItem))
cmd.Parameters.AddWithValue("@p2", cboDay1.SelectedItem.ToString)
... and so on for the other fields....
请注意,在使用参数和 AddWithValue 方法时,您应该非常准确地确定传递给参数的值的种类。如果基础字段需要一个数值,您应该按预期将该值转换为适当的数据类型。例如 AmountPaid 和 AmountDue 似乎是数字字段,您应该将用户输入转换为适当的数据类型(十进制?)