mysql - 使用参数将数据插入 MySQLTable

标签 mysql vb.net visual-studio insert insert-into

我有这个数据表,我想向其中插入数据,但每次执行这段代码时都会出错。

“未知数据类型”

我在一个模块上有一个函数(所以我不必重写它,我可以从每个表单调用它)来打开 MySQL 连接。

Imports MySql.Data.MySqlClient
Imports System.Net.Mail

Module Module1
Public MyConnection As New MySqlConnection
Public lastLogon As String = Today.Day & "/" & Today.Month & "/" & Today.Year & TimeOfDay.Hour & ":" & TimeOfDay.Minute & ":" & TimeOfDay.Second
Function ServerConnection()
    Try
        MyConnection.ConnectionString = "server=127.0.0.1;user=root;password=password;database=titulo"
        MyConnection.Open()
        Return True
    Catch ex As Exception
        Return False
    End Function
    'Don't mind this
    + Function SendMail(SendTo As String, subject As String, message As String)
End Function
End Module

所以我使用 ServerConnection 函数调用它,并将连接存储到一个名为 MyConnection 的公共(public)变量中,我可以从所有其他表单调用它。

问题是,我有这段代码来创建一个将数据插入表中的帐户:(我对西类牙语感到抱歉。只需检查代码,不要介意 SendMail 函数)

 Private Sub btnDo_Click(sender As Object, e As EventArgs) Handles btnDo.Click
    If txtUsername.Text <> "" And txtPassword.Text <> "" And txtPassword2.Text <> "" And txtEmail.Text <> "" Then
        If mailUsed = False Then
            If userUsed = False Then
                If txtPassword.Text <> txtPassword2.Text Then
                    lblError.Text = "Revise sus contraseñas."
                Else
                    lblError.Text = ""
                    Try
                        ServerConnection()
                        Dim MyCommand As New MySqlCommand("INSERT INTO titulo.accounts(id, accountName, accountPassword, accountMail, accountLogon) VALUES(0, @username, @password, @email, @logon)", MyConnection)
                        MyCommand.Parameters.Add("@username", SqlDbType.VarChar, 10).Value = txtUsername.Text
                        MyCommand.Parameters.Add("@password", SqlDbType.VarChar, 16).Value = txtPassword.Text
                        MyCommand.Parameters.Add("@email", SqlDbType.VarChar, 60).Value = txtEmail.Text
                        MyCommand.Parameters.Add("@logon", SqlDbType.VarChar, 22).Value = "First Session."
                        MyCommand.ExecuteNonQuery()
                        Try
                            SendMail(txtEmail.Text, "Nueva cuenta en TITULO", txtUsername.Text & Environment.NewLine & " Se ha creado una cuenta a su nombre en " & My.Application.Info.AssemblyName & Environment.NewLine & "Nombre de cuenta: " & txtUsername.Text & Environment.NewLine & "Contraseña: " & txtPassword.Text)
                        Catch ex As Exception
                            MsgBox(ex.Message)
                        Finally
                            MsgBox("Cuenta creada. Correo enviado a: " & txtEmail.Text & ".")
                        End Try

                    Catch ex As Exception
                        MessageBox.Show("Error en la base de datos." & Environment.NewLine & ex.Message)
                    Finally
                        MyConnection.Close()
                    End Try

                    MsgBox("La cuenta " & txtUsername.Text & " ha sido creada." & Environment.NewLine & "Revise su correo " & txtEmail.Text & " para revisar sus datos.")
                End If
            Else
                lblError.Text = "Ya existe una cuenta con ese nombre."
            End If
        Else
            lblError.Text = "Ese correo ya esta en uso."
        End If
    Else
        lblError.Text = "Revise sus datos."
    End If
End Sub

再次对西类牙语感到抱歉。 我在 titulo 数据库上的帐户表具有以下数据类型 id INT NOT NULL AUTO_INCREMENT,

accountName VARCHAR(10) NOT NULL,

accountPassword VARCHAR(16) NOT NULL,

accountMail VARCHAR(60) NOT NULL,

accountLogon VARCHAR(22) NOT NULL,

如果有任何帮助,我将不胜感激。

最佳答案

MySql 代码应该使用 MySqlDbType 枚举来定义参数的数据类型。您正在使用 SqlDbType。

此代码将向您显示两者不具有相同的值

int x = (int)SqlDbType.VarChar;
int y = (int)MySqlDbType.VarChar;
Console.WriteLine("SqlDbType.VarChar = " + x);   
Console.WriteLine("MySqlDbType.VarChar = " + y);

输出是

SqlDbType.VarChar = 22 
MySqlDbType.VarChar = 253

与您的实际问题无关,但我需要告知您代码中存在很大的安全风险。不要以明文形式存储密码。始终使用哈希算法和盐 key 来存储用户密码的不可逆字节。

Best way to store password in database

关于mysql - 使用参数将数据插入 MySQLTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42666176/

相关文章:

mysql - 如何更改 RDS MYSQL 数据库上的 "characters treated as letters"列表?

mysql - 为每个值选择两行

c# - 如何使用 .NET 获取属性中的构造函数参数名称?

vb.net - 检查 Internet 连接 vb.net

vb.net - 使用 vb.net 在 MS Access 中插入和更新值

visual-studio - 有没有办法在 Visual Studio 中对 F# 中的阴影值发出警告?

php - 将MySQL请求结果放入表中

mysql - 在 mysql 中创建用于生成 UUID 的触发器

c# - 如何在 net core C# 中获取当前环境 (QA/Prod/DEV) 名称?

visual-studio - 可以找到MSBuild 15.0的注册表