Member 13118967 Ответов: 1

Как получить выбранные элементы из checkedlistbox и сохранить их в таблице базы данных SQL?


Привет, ребята, я делаю приложение, в котором я хочу заполнить свой checkedlistbox из моей таблицы базы данных SQL, а затем сохранить обратно проверенные элементы в той же базе данных, и я могу заполнить его из базы данных, но я получаю ошибку при попытке получить проверенные элементы из checkedlistbox и сохранить их в той же базе данных.





Что я уже пробовал:

Вот мой код:-

Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
    Private pre As DataTable


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CheckedListBox1.DataSource = getdata()
        CheckedListBox1.DisplayMember = "sem1"

    End Sub

    Private Function getdata() As DataTable
        pre = New DataTable
        Dim str As String = "select sem1 from sem"
        Dim connectionString As String = "Server=DESKTOP-V12PTAV ;Database=test ;User Id=sa ;Password=wills8877"
        Using conn As New SqlConnection(connectionString)
            Using adapter As New SqlDataAdapter(str, conn)
                conn.Open()
                adapter.Fill(pre)
                conn.Close()
            End Using
        End Using

        Return pre

    End Function

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim SqL As String = "INSERT INTO sem (sem2) " & "VALUES (sem2)"

        Dim connectionString As String = "Server=DESKTOP-V12PTAV ;Database=test ;User Id=sa ;Password=wills8877"
        Using conn As New SqlConnection(connectionString)
            conn.Open()
            Try
                Using cmd As New SqlCommand(SqL, conn)

                    For i As Integer = 0 To CheckedListBox1.Items.Count - 1

                        Dim chkstate As CheckState

                        chkstate = CheckedListBox1.GetItemCheckState(i)

                        If (chkstate = CheckState.Checked) Then

                            cmd.Parameters.AddWithValue("sem2", CheckedListBox1.Items(i))
                            cmd.ExecuteNonQuery()
                            cmd.Parameters.Clear()

                        End If
                    Next
                End Using

                MessageBox.Show("Students saved")

            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            conn.Close()
        End Using

    End Sub
End Class


Я получаю эту ошибку, когда выбираю какой-либо элемент и нажимаю кнопку:-
Не существует сопоставления типа объекта system.data.datarowview с известным собственным типом управляемого поставщика.

1 Ответов

Рейтинг:
1

ZurdoDev

Если вы отладите его, это будет довольно легко увидеть. Кроме того, когда вы получаете ошибку, также покажите, какая строка кода вызывает ошибку. В этом случае я могу сказать, что это происходит, когда вы добавляете параметр в cmd, потому что вы пытались добавить весь элемент вместо текста элементов. Измените его на

CheckedListBox1.Items(i).Text


Member 13118967

Хорошо я попробовал это я получаю эту ошибку сейчас

Текст открытого члена на тип объекта datarowview 'не найдены.

ZurdoDev

Оказывается, у него нет текстового свойства. Вам просто нужно посмотреть документацию. Вызов.ToString () вместо .Text.

Прошу прощения, я уже много лет не занимаюсь Windows Forms.

Member 13118967

Вы имеете в виду метод getitemtext ?

Member 13118967

Я попробовал .ToString его все еще не работает.

ZurdoDev

"Не работает" нам ничего не говорит.

Member 13118967

он показывает эту ошибку :-
Неправильный синтаксис рядом с"?".

ZurdoDev

Это легко исправить. Отладьте его и исправьте.

Member 13118967

Но что означает эта ошибка, когда она появляется в строке add parameter?

ZurdoDev

Я сомневаюсь, что это происходит по этой линии. Вероятно, это происходит на cmd.ExecuteNonQuery (), потому что это похоже на сообщение об ошибке sql.

Member 13118967

Да да вы правы к сожалению его исходя из ЦМД.nonexecutequery() метод.Что мне теперь делать ?

ZurdoDev

Исправить ошибку. Я не хочу показаться грубым, но вы задаете много очень простых вопросов.

Посмотрите на ошибку. Он говорит, что есть синтаксическая ошибка. Это означает, что что-то в вашем sql не так. Но мы не можем этого знать, потому что не видим, что вы делаете.

Простая отладка-это все, что вам нужно сделать.

Member 13118967

Хорошо, вы имеете в виду, что код Нью-Йорка ошибочен в каком-то месте, например, в моем запросе ?

ZurdoDev

Да, выполняемый запрос содержит синтаксические ошибки. Я предполагаю, что вы не используете параметры, а вместо этого объединяете строки, и одна из строк имеет символ, который нарушает sql.

Member 13118967

Он показывает недопустимое имя столбца, но я использую правильное имя.

Member 13118967

Хорошо, я исправил ошибку, но это не сохранение проверенных элементов, это сохранение значения, которое я даю в методе addparameter в двойных кавычках, как это исправить ?

Member 13118967

Нет, извините, что он сохраняет значение, которое я даю в значении в моем sql-запросе вместо проверенных данных.

Member 13118967

Хорошо, я обнаружил, что мой запрос не прав в разделе значений то, что делает моя программа, - это сохранение текста thr, который я объявляю в разделе значений в моем sql-запросе вместо элементов, которые проверяются в моем checkedlistbox . Так как же мне тогда написать свой запрос ?

ZurdoDev

Сделайте это хранимой процедурой и передайте параметры.

Member 13118967

Да, я могу это сделать, но когда я запускаю этот запрос, он показывает то же самое, что и сохранение строки в моей таблице, которую я объявляю в разделе "значения". Кроме того, если я создаю процедуру, где я ее передаю ?

Member 13118967

Пожалуйста, скажите мне, каким должен быть запрос, который я хочу получить, чтобы проверить текст элементов и вставить их в таблицу с именем "tab" под столбцом "pre".

ZurdoDev

Вкладка UPDATE SET pre = @pre, а затем в c#
УМК.Параметры.AddWithValue ("@pre", текст);

Member 13118967

С# ? Но я использую VB.net

ZurdoDev

Обращают его. Они почти одинаковы.