Ошибка синтаксиса оператора запроса MySql - PullRequest
0 голосов
/ 06 сентября 2011

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

Для тех из вас, кто должен знать, я использую последнюю версию сервера MySql, MySql Workbench и Visual Basic 2010 Express на ноутбуке под управлением Windows 7. Я пишу эту программу на VB.net.

Спасибо!

Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
    Dim sqluser As MySqlCommand = New MySqlCommand(
        "CREATE USER " & txtuser.Text & "@" & frmLogin.txtserver.Text & " IDENTIFIED BY '" & txtpass.Text & "';", con)
    Dim sqlinfo As MySqlCommand = New MySqlCommand(
        "INSERT INTO employee(Name ,Title) VALUES('" & txtname.Text & "','" & txttitle.Text & "';", con)
    Try
        con.Close()
        con.Open()

        sqluser.ExecuteNonQuery()
        MessageBox.Show("User Account successfully created!!")

        sqlinfo.ExecuteNonQuery()

        ' retrieving the administration table.
        DataAdapter1.SelectCommand = sqladmin
        DataAdapter1.Fill(ds, "stratos")
        DataGrid1.DataSource = ds
        DataGrid1.DataMember = "stratos"

        con.Close()
        MessageBox.Show("User Information successfully created!!")


    Catch myerror As MySqlException
        MessageBox.Show("Error Setting Up Account: " & myerror.Message)
    End Try

End Sub

1 Ответ

3 голосов
/ 06 сентября 2011

Вам не хватает ')' в конце вашего оператора вставки.

Dim sqlinfo As MySqlCommand = New MySqlCommand("INSERT INTO employee(Name ,Title ) VALUES('" & txtname.Text & "','" & txttitle.Text & "');"

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

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

CREATE USER '" & txtuser.Text & "'@'" & frmLogin.txtserver.Text & "' IDENTIFIED BY '" & txtpass.Text & "';"

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

Dim sqluser As MySqlCommand = New MySqlCommand("CREATE USER ?user@?host IDENTIFIED BY ?pass;", con)
sqluser.Parameters.Add("?user", txtuser.Text)
sqluser.Parameters.Add("?host", frmLogin.txtserver.Text)
sqluser.Parameters.Add("?pass", txtpass.Text)
sqluser.Prepare()

Dim sqlinfo As MySqlCommand = New MySqlCommand("INSERT INTO employee(Name ,Title) VALUES( ?user, ?title );", con)
sqlinfo.Parameters.Add("?user", txtuser.Text)
sqlinfo.Parameters.Add("?title", txttitle.Text)
sqlinfo.Prepare()

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

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