vb.net ms доступ к базе данных mdb код записи вставки не работает - PullRequest
0 голосов
/ 01 января 2019

Я хочу вставить данные в таблицу базы данных MS Access (mdb).Код показан ниже:

Imports System.Data.OleDb

Imports System.Data


        Dim Cmd As OleDbCommand
        Dim SQL As String
        Dim objCmd As New OleDbCommand
        Dim Con = New OleDbConnection("Provider=Microsoft.ace.oledb.12.0; Data Source=" & pth & "\database.mdb; User Id=; Password=;")
        MsgBox(RichTextBox1.SelectedText)

        SQL = "insert into approved ( word, approveds) VALUES ('" & RichTextBox1.SelectedText & "', " & "'YES')"
        MsgBox(SQL)

        Cmd = New OleDbCommand(SQL, Con)
        Con.Open()
        objCmd = New OleDbCommand(SQL, Con)
        objCmd.ExecuteNonQuery()
        Con.Close()

Показывает следующее сообщение об ошибке

Необработанное исключение типа 'System.Data.OleDb.OleDbException' произошло в System.Data.dll

Дополнительная информация: Несоответствие типов данных в выражении критериев.

Может ли кто-нибудь помочь, пожалуйста, или любая другая процедура

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Просто небольшое дополнение к коду @zack raiyan.Это блок Using, который закроет и удалит ваше соединение.Это важно для объектов подключения, потому что они используют неуправляемый код.

Я предполагаю, что, поскольку ваша ошибка - несоответствие типа данных, проблема может быть в столбце утвержденных.Если это столбец Да / Нет, то для значения будет безопасно использовать True.

Проверьте типы данных 2 параметров в таблице базы данных и откорректируйте код соответствующим образом.

Private Sub AddRecord(pth As String)
    Dim SQL = "insert into approved ( word, approveds) VALUES (@word, @approval)"
    Using Con As New OleDbConnection("Provider=Microsoft.ace.oledb.12.0; Data Source=" & pth & "\database.mdb; User Id=; Password=;")
        Dim Cmd As New OleDbCommand(SQL, Con)
        Cmd.Parameters.Add("@word", OleDb.OleDbType.VarChar).Value = RichTextBox1.SelectedText
        Cmd.Parameters.Add("@approval", OleDbType.Boolean).Value = True
        Con.Open()
        Cmd.ExecuteNonQuery()
    End Using
End Sub
0 голосов
/ 01 января 2019

Перво-наперво.

Что вы ожидаете от " & "'YES'?Поправьте меня, если я ошибаюсь, но вы хотите передать Yes в качестве значения?Или, может быть, даже "Yes" (с кавычками)?

Если это первый, то достаточно только Yes внутри одинарных кавычек ('Yes').Для второго случая это будет '\"Yes\"'.

С вашим кодом все еще слишком много проблем.Вы используете оператор & для объединения строк.Некоторые могут возразить, что нет проблем с использованием &, но посмотрите на код и скажите, какое у вас первое выражение?Ну, мое первое выражение было:

Это выглядит ужасно!

Так что вместо конкатенации вы можете просто отформатировать строку.Конечно, результаты те же, но форматирование строк будет выглядеть чище и профессиональнее.Вот пример:

 Dim x as String = "My Name Is {0}."
 Dim MyName As String = String.Format(x, "Zack Raiyan")

Теперь приходит MsgBox(SQL).Что ж, мне не нужно второе предположение для этого, вы используете эту строку, чтобы увидеть, соответствует ли ваш SQL-запрос ожидаемому. Если это так, почему бы просто не поставить точку останова?

Теперь поговорим о объявлениях ваших переменных.Зачем объявлять переменную, не инициализируя ее каким-либо экземпляром, но позже, сразу после нескольких строк кода, инициализировать ее, когда это можно было сделать в первую очередь?Пример:

Dim x As New ObjectX

Вместо

Dim x As Object
.....
.....
x = New Object()

Наконец, если вы разочаровываетесь, читая все эти предложения, давайте поговорим о главном виновнике здесь ваше заявление sql .

insert into approved ( word, approveds)

Пробел до и после скобок может не иметь никакого значения, но зачем вообще их использовать?Вы можете быть новичком в программировании, но понимаете это:

Вы бы потратили 20% своего времени на написание кода и 80% своего времени на его поддержку.

ИтакВсегда пишите чистые, простые и многократно используемые коды.

Двигаемся дальше ...

 VALUES ('" & RichTextBox1.SelectedText & "')

Не делайте этого! Вместо этого передайте параметры, а затем передайте им значения.Быстрый пример:

Dim sql = New SqlCommand("Insert Into TableX(Column1)Values(@Column1Val)", MySqlConnection)

sql.Parameters.Add("@Column1Val", SqlDbType.VarChar).Value = "XYZ"

Есть более короткий путь:

sql.Parameters.AddWithValue("@Column1Val", "XYZ")

, но используйте его только тогда, когда вы знаете, что передаете значение того же типа данных, что и столбец, который выпередаем его.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...