Я пытаюсь заставить мою систему вставлять значения полей со списком в мою базу данных доступа. Я всегда получаю эту очень длинную ошибку, когда я пытаюсь нажать кнопку «добавить», и я как-то ощущаю это, потому что это из-за моего заявления INSERT. Это мой код для моей формы. Любая помощь будет оценена! СпасибоВставка значений со списком?
Imports System.Data.OleDb
Public Class AdmMain
Sub fillcombo()
strsql = " select yrgr from yearandgrade"
Dim acscmd As New OleDb.OleDbCommand
acscmd.CommandText = strsql
acscmd.Connection = acsconn
acsdr = acscmd.ExecuteReader
While (acsdr.Read())
cboyr.Items.Add(acsdr("yrgr"))
End While
acscmd.Dispose()
acsdr.Close()
End Sub
Sub comb2()
strsql = " select sections from sectio"
Dim acscmd As New OleDb.OleDbCommand
acscmd.CommandText = strsql
acscmd.Connection = acsconn
acsdr = acscmd.ExecuteReader
While (acsdr.Read())
cbosec.Items.Add(acsdr("sections"))
End While
acscmd.Dispose()
acsdr.Close()
End Sub
Private Sub LinkLabel1_LinkClicked(sender As System.Object, e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
If MessageBox.Show("Are you sure you want to logout?", "Logout", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
MessageBox.Show("You have successfully logged out of VCM's Library Information System!", "Logout Confirmed")
Me.Close()
LoginUser.Show()
End If
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Me.txtFName.Text = ""
Me.txtMName.Text = ""
Me.txtLName.Text = ""
Me.cboyr.Text = ""
Me.cbosec.Text = ""
Me.txtFName.Focus()
End Sub
Private Sub AdmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Module1.connect()
Me.fillcombo()
Me.comb2()
End Sub
Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click
Dim rbdtext As String = cboyr.SelectedItem.ToString
Dim uno As String = cbosec.SelectedItem.ToString
Try
Using conn = New System.Data.OleDb.OleDbConnection()
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Thesis\Thesis\Database1.accdb"
conn.Open()
Dim sqlquery As String = "INSERT INTO students (StudentID, FirstName,MiddleName,LastName,Yr, Section) " & _
"VALUES (@studid, @fname,@mname,@lname,@yr, @sec)"
Dim SqlCommand As New System.Data.OleDb.OleDbCommand
SqlCommand.Parameters.AddWithValue("@studid", TxtID.Text)
SqlCommand.Parameters.AddWithValue("@fname", txtFName.Text)
SqlCommand.Parameters.AddWithValue("@mname", txtMName.Text)
SqlCommand.Parameters.AddWithValue("@lname", txtLName.Text)
SqlCommand.Parameters.AddWithValue("@yr", rbdtext)
SqlCommand.Parameters.AddWithValue("@sec", uno)
SqlCommand.Connection = conn
Dim sqlRead As System.Data.OleDb.OleDbDataReader = SqlCommand.ExecuteReader()
MsgBox("One record successfully added!", "Added!")
End Using
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Heres ошибка продолжает показывать кстати! http://i.imgur.com/DgjiWqm.png
Используйте ExecuteNonQuery вместо ExecuteReader (ну, если вы установите команду, она также работает с ExecuteReader, но нет смысла возвращать читателя, когда вы вставляете запись) – Steve
«Dim sqlRead As System.Data.OleDb.OleDbDataReader = SqlCommand.ExecuteNonQuery« Я получаю синюю линию ниже Sqlcommand.ExecuteNonQuery , «Значение типа« Целое »не может быть преобразовано в« System.Data.OleDb.OleDbDataReader ».» – Phonseal
Точно. ExecuteNonQuery возвращает количество строк, которые ваша команда (команда не SELECT) была изменена, вставлена, удалена. Оператор insert не возвращает читателя, потому что читать нечего, просто количество вставленных строк (оно должно быть 1 для вашего запроса). – Steve