Member 14621280 Ответов: 1

Когда обновление от VB.NET для ms access это говорит об ошибке?


у меня обновление от vb.net в МС доступ к базе данных, но когда обновление БТН нажмите ее говорит, что запись сохранена, но сразу оговорюсь
Syntax error in UPDATE statement


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

pro = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:/Praise/Praise/bin/Debug/Database.accdb"
        connString = pro
        myConnection.ConnectionString = connString
        myConnection.Open()
        command = "Update SONGS Set [SONG_ETITLE]'" & TextBox2.Text & "', [SONG_TTITLE]='" & TextBox3.Text & "', [SONG_SONGS1]='" & RichTextBox1.Text & "' where [CODE]=" & TextBox1.Text & ""

        Dim cmd As OleDbCommand = New OleDbCommand(command, myConnection)
        MsgBox("Record Update")
        Try
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            myConnection.Close()
            TextBox1.Enabled = False
            TextBox2.Enabled = False
            TextBox3.Enabled = False
            RichTextBox1.Enabled = False


        Catch ex As Exception
            MsgBox(ex.Message)

        End Try
    End Sub

Richard MacCutchan

Добавьте инструкцию print в свой код или используйте отладчик для просмотра сгенерированной инструкции. Ошибка должна быть ясна.

Member 14621280

'Praise.vshost.exe' (CLR v4.0.30319: Praise.vshost.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (CLR v4.0.30319: Praise.vshost.exe): заряжен 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Хостингпроцесс.Утилиты\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Хостингпроцесс.Utilities.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (среда CLR версии 4.0.30319: Praise.vshost.exe): Загрузил C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Окна.Формы\v4.0_4.0.0.0__b77a5c561934e089\система.Окна.Forms.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (CLR v4.0.30319: Praise.vshost.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (среда CLR версии 4.0.30319: Praise.vshost.exe): Загрузил C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Чертеж\v4.0_4.0.0.0__b03f5f7f11d50a3a\система.Drawing.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (CLR v4.0.30319: Praise.vshost.exe): заряжен 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Хостингпроцесс.Коммунальные услуги.Sync\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Хостингпроцесс.Utilities.Sync.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (CLR v4.0.30319: Praise.vshost.exe): заряжен 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Отладчик.Runtime\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Отладчик.Runtime.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (CLR v4.0.30319: Praise.vshost.exe): заряжен 'F:\Praise\Praise\bin\Debug\Praise.vshost.exe". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (среда CLR версии 4.0.30319: Praise.vshost.exe): Загрузил C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Конфигурация\v4.0_4.0.0.0__b03f5f7f11d50a3a\система.Configuration.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (среда CLR версии 4.0.30319: Praise.vshost.exe): Загрузил C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (CLR v4.0.30319: Praise.vshost.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (среда CLR версии 4.0.30319: Praise.vshost.exe): Загрузил C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Развертывание\v4.0_4.0.0.0__b03f5f7f11d50a3a\система.Deployment.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (CLR v4.0.30319: Praise.vshost.exe): загружено 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll'. Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (CLR v4.0.30319: Praise.vshost.exe): загружено 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll'. Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'Praise.vshost.exe' (среда CLR версии 4.0.30319: Praise.vshost.exe): Загрузил C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0_

Richard MacCutchan

Очень интересно, но где же распечатка сгенерированного заявления об обновлении?

Member 14621280

Песни обновление комплект [SONG_ETITLE]='Он-Господь!', [SONG_TTITLE]=',NaRNt МЗ;здравоохранение;', [SONG_SONGS1]=',он есть Господь! ОН-ГОСПОДЬ!
ОН ВОСКРЕС ИЗ МЕРТВЫХ
И ОН-ГОСПОДЬ.
КАЖДОЕ КОЛЕНО ПРЕКЛОНИТСЯ
КАЖДЫЙ ЯЗЫК ИСПОВЕДУЕТСЯ
ЧТО ИИСУС ХРИСТОС ЕСТЬ ГОСПОДЬ.

56546456' где [код]=5

Richard MacCutchan

Это не соответствует опубликованному вами коду, в котором отсутствует = подпишите следующее Update SONGS Set [SONG_ETITLE].

Member 14621280

Обновить набор песен =[SONG_ETITLE]

правильно ли это?

Richard MacCutchan

Нет, знак равенства должен находиться между именем столбца и полем значения. Пожалуйста, не пытайтесь угадать синтаксис, а подробно изучите документацию. Видеть Инструкция обновления SQL[^].

Member 14621280

команда = "песни обновление комплект [SONG_ETITLE]='" &амп; поле textbox2.Текст &ампер; "', [SONG_TTITLE]='" &амп; textbox3 и.Текст &ампер; "', [SONG_SONGS1]='" &амп; richtextbox1 отображение.Текст &ампер; "', где [код]=" &амп; текстовое поле textbox1.Текст и усилитель; ""

1 Ответов

Рейтинг:
2

OriginalGriff

Две вещи:
1) Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

2) вы пропустили "=" в первом предложении обновления:
Update SONGS Set [SONG_ETITLE]'" & TextBox2.Text & "',
                              ^
                              |



Сколько раз мы должны повторять тебе одно и то же? Если вы не собираетесь слушать нас и учиться у нас, есть ли смысл в том, чтобы мы отвечали на ваши вопросы? Или даже то, что ты их спрашиваешь?


Member 14621280

Извините OriginalGriff... я новичок в этом деле. VB.net я учусь ... когда вы говорите что-то на SQL, я не могу понять термин, который вы используете? это главная причина....

Member 14621280

Теперь эта синтаксическая ошибка исчезла.. но сохранение в БД-это проблема ... даже я совершенно пуст в sql-командах .....

OriginalGriff

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

И прекратите связывать строки!

Member 14621280

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

OriginalGriff

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

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

Какой курс или книгу вы используете?

Member 14621280

Использование con в качестве нового SqlConnection(strConnect)
против.Открыть()
Используя com как новая команда sqlcommand("вставить в песни (SONG_ETITLE, SONG_TTITLE, SONG_SONGS1) значения (@SONG_ETITLE, @SONG_TTITLE, @SONG_SONGS1)", кон)
ком.Параметры.AddWithValue ("@SONG_ETITLE", TextBox2.Text)
ком.Параметры.AddWithValue ("@SONG_TTITLE", TextBox3.Text)
ком.Параметры.AddWithValue ("@SONG_SONGS1", RichTextBox1.Text)
ком.Метод executenonquery()
ком.Располагать()
против.Закрывать()
Текстовое поле textbox1.Включен = Ложь
Поле textbox2.Включен = Ложь
Textbox3 и.Включен = Ложь
Richtextbox1 отображение.Включен = Ложь



Конец Использования
Конец Использования

я уже пробовал то, что вы сказали раньше.... но эта ошибка возникает, когда обновление "свойство ConnectionString не было инициализировано."

Member 14621280

<конфигурация>
<configsections>

<соединительные нити>
<добавить имя="хвала.My.MySettings.DatabaseConnectionString" свойства connectionString="поставщика=Майкрософт.Туз.Oledb для.12.0;Источник данных=Ф:/хвалить/похвалить/бин/отладки/базы данных.# то # "
="" имя_поставщика="системы.Данных.OleDb">

<startup>
<supportedruntime version="v4.0" sku=".NETFramework,версия=v4.5">




это мой параметр connectionString

OriginalGriff

:вздыхать:
Что я говорил о догадках и размышлениях?

Что говорится в сообщении об ошибке? Читать слова. Прочтите их еще раз. Как ты думаешь, что они означают? Вы смотрели, чтобы точно увидеть, что находится в строке, которую вы пытаетесь использовать для подключения? Как же так? Что же он показал?

Это элементарная вещь: вы пытаетесь использовать короткие пути и надеетесь, что все это работает, вместо того чтобы прилагать усилия к тому, чтобы научиться на самом деле что-то делать, и это совсем не хорошая идея.
Возьмите курс, возьмите хорошую книгу. Начните думать, а не гадать!

Member 14621280

Спасибо за информацию