Я пытаюсь сравнить значение combobox
с данными, хранящимися уже в базе данных, если данных не существует, тогда пользователю следует сообщить, что он должен выбрать запись из списка или запишите имя, которое уже существует в базе данных!Как сравнить значение поля со списком со значением таблицы, хранящимся в SQL Server
Ниже код, который я написал для него:
Private Sub btnsave_Click(sender As Object, e As EventArgs) Handles btnsave.Click
Try
'Declare new data adapter and new datatable for publisher id & Auhtor id and ISBN
' to check record exist already or no
Dim pda As New SqlDataAdapter
Dim pdt As DataTable
Dim matchPub_name As String = cboPub_id.Text
pda = New SqlDataAdapter("SELECT pub_name FROM publisher WHERE pub_name [email protected]_name", cn)
pdt = New DataTable
pda.Fill(pdt)
Dim ada As New SqlDataAdapter
Dim adt As DataTable
Dim matchAuthor_name As String = cboAuthor_id.Text
ada = New SqlDataAdapter("SELECT author_name FROM author WHERE author_name =" & matchAuthor_name, cn)
adt = New DataTable
ada.Fill(adt)
Dim matchISBN As String = txtisbn.Text.ToString
da = New SqlDataAdapter("SELECT isbn from book WHERE isbn =" & "'" & matchISBN & "'", cn)
dt = New DataTable
da.Fill(dt)
If pdt.Rows.Count = -1 Then
lblAlert.BackColor = Color.HotPink
ErrorProvider1.SetError(cboPub_id, _
"*Please Select or type available Publishers or register new in Publisher form")
lblAlert.Text = "Check Respected Error"
lblInfo.Text = ""
ElseIf adt.Rows.Count = -1 Then
lblAlert.BackColor = Color.HotPink
ErrorProvider1.SetError(cboAuthor_id, _
"*Please Select or type available Authors or register new in Author form")
lblAlert.Text = "Check Respected Error"
lblInfo.Text = ""
ElseIf dt.Rows.Count > 0 Then
lblAlert.BackColor = Color.HotPink
ErrorProvider1.SetError(cboAuthor_id, _
"*a record with provided ISBN already exist in Database. Insert Unique ISBN")
lblAlert.Text = "Check Respected Error"
lblInfo.Text = ""
Else
'Insert into Book Table
cmd = New SqlCommand("Insert into book(isbn, book_name, price, rack_no, no_of_books, staff_id, " _
& " pub_id, sub_code, author_id) values(@isbn, @book_name, @price, @rack_no, " _
& " @no_of_books, @staff_id, @pub_id, @sub_code, @author_id)", cn)
With cmd.Parameters
.AddWithValue("@isbn", txtisbn.Text).ToString()
.AddWithValue("@book_name", txtbook_name.Text)
.AddWithValue("@price", txtprice.Text)
.AddWithValue("@rack_no", txtrack_no.Text)
.AddWithValue("@no_of_books", TxtNo_of_Books.Text)
.AddWithValue("@staff_id", Convert.ToInt32(cboStaff_id.SelectedValue.ToString()))
.AddWithValue("@pub_id", Convert.ToInt32(cboPub_id.SelectedValue.ToString()))
.AddWithValue("@sub_code", cboSub_Code.Text)
.AddWithValue("@author_id", cboAuthor_id.SelectedValue)
End With
cmd.ExecuteNonQuery()
'Insert into Published_by Table
cmd = New SqlCommand("Insert into published_by(isbn, pub_id, pub_date, vol_no) " _
& " values(@isbn, @pub_id, @pub_date, @vol_no)", cn)
cmd.Parameters.AddWithValue("@isbn", txtisbn.Text).ToString()
cmd.Parameters.AddWithValue("@pub_id", Convert.ToInt32(cboPub_id.SelectedValue.ToString()))
cmd.Parameters.AddWithValue("@pub_date", DateTimePicker1.Text)
cmd.Parameters.AddWithValue("@vol_no", txtvol_no.Text)
cmd.ExecuteNonQuery()
'Insert into Authored_by Table
cmd = New SqlCommand("Insert into authored_by(isbn, author_id, completion_date) " _
& " values(@isbn, @author_id, @completion_date)", cn)
cmd.Parameters.AddWithValue("@isbn", txtisbn.Text).ToString()
cmd.Parameters.AddWithValue("@author_id", cboAuthor_id.SelectedValue)
cmd.Parameters.AddWithValue("@completion_date", dtpCompletion_Date.Text)
cmd.ExecuteNonQuery()
'MessageBox.Show("Record Saved Successfully", "Save", MessageBoxButtons.OK, MessageBoxIcon.Information)
lblAlert.Text = ""
lblInfo.Text = "Saved"
End If
Catch ex As Exception
MessageBox.Show("Not Completed Because OF The Following Error " & "%" & ex.Message & "%", "Error", _
' MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
, но когда я ввод данных в cboAuthor_Name
, который не доступен в БД дает ошибку Invalid column name ' '
, как справиться с этим? любая помощь?
a) dont concat SQL никогда - всегда используйте параметры SQL. b) cboAuthor_Name не упоминается там, не уверен, как этот код относится к проблеме. – Plutonix
Несколько разъяснений: pub_name - это столбец текста типа? и вы объявляете переменную dt, но заполняете pdt. Это опечатка? – Steve
@Steve да, это была опечатка, только что отредактированная, и да pub_name - это текст – Hazmat