Member 12919944 Ответов: 2

Почему мой запрос на обновление не работает ?


Private Sub updateww()
        Dim con As New SqlConnection
        Dim cmd As New SqlCommand

        con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Administrator\Documents\Visual Studio 2010\Projects\St. Peter Academy\St. Peter Academy\App_Data\St.mdf;Integrated Security=True;User Instance=True"
        con.Open()
        cmd.Connection = con
        cmd.CommandText = "update " & dbname.Text & " set percentage='" & edwwp.Text & "', description='" & edwwd.Text & "' where componentid=1 "
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub

    Private Sub updatept()
        Dim con As New SqlConnection
        Dim cmd As New SqlCommand

        con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Administrator\Documents\Visual Studio 2010\Projects\St. Peter Academy\St. Peter Academy\App_Data\St.mdf;Integrated Security=True;User Instance=True"
        con.Open()
        cmd.Connection = con
        cmd.CommandText = "update " & dbname.Text & " set percentage= '" & edptp.Text & "', description='" & edptd.Text & "' where componentid=2 "
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub
    Private Sub updateqa()
        Dim con As New SqlConnection
        Dim cmd As New SqlCommand

        con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Administrator\Documents\Visual Studio 2010\Projects\St. Peter Academy\St. Peter Academy\App_Data\St.mdf;Integrated Security=True;User Instance=True"
        con.Open()
        cmd.Connection = con
        cmd.CommandText = "update " & dbname.Text & " set percentage='" & edqap.Text & "', description='" & edqad.Text & "' where componentid=3 "
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub


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

мое обновление не работает . он не показывает никаких ошибок, но не обновляется

Dave Kreskowiak

Без знания значений, которые вы вставляете в запрос, это невозможно сказать вам.

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

Google для "атаки SQL-инъекций", чтобы узнать, почему то, что вы делаете, так плохо.

Тогда погугли для "VB.NET параметризованные запросы", чтобы узнать, как это исправить и облегчить отладку вашего кода.

2 Ответов

Рейтинг:
0

OriginalGriff

Здесь столько всего нужно исправить....

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

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

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

В-четвертых, объекты SqlConnection и SqlCommand являются дефицитными ресурсами и должны быть утилизированы, когда вы закончите с ними.

Теперь о проблеме, которую вы заметили ... Мы не можем сказать! Это может быть то, что ваши данные в текстовых полях вызывают проблему, это может быть то, что нет ошибок, которые соответствуют вашему состоянию. Поэтому сначала начните исправлять другие вещи в вашем приложении, и если проблема все еще происходит после этого, проверьте свою базу данных и убедитесь, что данные находятся там, где вы думаете, и что вы думаете.

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


Рейтинг:
0

Wendelius

Как уже было сказано в коде есть много проблем
- конкатенация значений оставляет вас открытыми для SQL-инъекций
- конкатенация значений создает проблемы преобразования
- вы не используете блоки using, поэтому Dispose может быть опущен, даже если он присутствует
- у вас нет никакой обработки ошибок
- строка соединения статически встроена в метод
- не обязательно проблема, но если эти методы используются в цикле или с другими операторами DML, то вы пропускаете транзакции и так далее...

Я предлагаю пройти через Правильное выполнение операций с базой данных[^]